首页 > 解决方案 > 哪个是更好的解决方案?(异常处理)

问题描述

我应该把异常处理放在哪里?哪一个是代码的最佳解决方案:

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

或者

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

标签: pythontry-catchexcept

解决方案


第一种方法意味着该spam()函数的任何用户都需要检查它是否返回一个数字或None在他们尝试使用结果之前(除非他们所做的只是打印结果,如您的示例所示)。

第二种方法意味着所有用户都必须try/except在调用周围添加。

无论哪种方式,调用者都必须做一些事情来处理零除法错误。

第二种方法更灵活,因为调用者可以自定义他们处理异常的方式。第一种方法总是打印相同的消息并返回None,调用者对此无能为力。


推荐阅读