Python 哪一个是更好的解决方案?(异常处理)
我应该将异常处理放在哪里?哪一个是代码的最佳解决方案:Python 哪一个是更好的解决方案?(异常处理),python,try-catch,except,Python,Try Catch,Except,我应该将异常处理放在哪里?哪一个是代码的最佳解决方案: def spam(divideBy): try: return 42 / divideBy except ZeroDivisionError: print('Error: Invalid argument.') print(spam(2)) print(spam(12)) print(spam(0)) print(spam(1)) 或 第一种方法意味着spam()函数的任何用户在尝试使用结果
def spam(divideBy):
try:
return 42 / divideBy
except ZeroDivisionError:
print('Error: Invalid argument.')
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))
或
第一种方法意味着
spam()
函数的任何用户在尝试使用结果之前都需要检查它是否返回数字或None
(除非他们所做的只是打印结果,如您的示例所示)
第二种方法意味着所有用户都必须在调用周围添加try/except
无论哪种方式,调用方都必须做一些事情来处理零除法错误
第二种方法更灵活,因为调用方可以自定义处理异常的方式。第一个方法总是打印相同的消息并返回
None
,调用者对此无能为力。使用第一个方法在函数上下文中完全处理任何异常。其余的异常应该使用方法2抛出给调用方。取决于上下文。我更喜欢您的第一个代码,但遵循您的代码样式,我将返回“Error:Invalid argument”)而不是print,因为您在print(spam(1))中使用了invoce函数,这是什么意思?我遵循缩进规则,但正如您在第二种方法中注意到的,最后一个数字是不会被打印出来的。如果我还想打印最后一个号码呢?你可以在每个电话周围单独放置一个try/except
,而不是将它们全部包装起来。
def spam(divideBy):
return 42 / divideBy
try:
print(spam(2))
print(spam(12))
print(spam(0))
print(spam(1))
except ZeroDivisionError:
print('Error: Invalid argument.')