Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 哪一个是更好的解决方案?(异常处理)_Python_Try Catch_Except - Fatal编程技术网

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.')