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

Which is a better solution? (exception handling)

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

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

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

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

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

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