是否应将try / except放在函数声明或调用中?

时间:2019-07-11 12:02:17

标签: python try-catch pep8

这两个代码片段都执行相同的操作:

在函数声明中尝试/除外:

def something():
    try:
        # code goes here
    except:
        print("Error")
        sys.exit(1)

something()

尝试/函数调用除外:

def something():
    # code goes here

try:
    something()
except:
    print("Error")
    sys.exit(1)

是否有更好/更多Pythonic / PEP8推荐的版本,还是仅取决于个人喜好?我知道,如果该函数需要多次调用,那么第二种方法将变得乏味且重复,但是假设该函数仅被调用一次,我应该使用哪个方法?

1 个答案:

答案 0 :(得分:0)

一般规则是“仅捕获可以处理的异常”,有关说明,请参见here

请注意,未捕获的异常(在大多数语言中)将导致程序以不成功的状态代码(即您的sys.exit(1))退出,也可能会打印出一条消息,指出发生了异常。因此,您的演示正在模拟默认行为,但效果更糟

此外,您正在捕获每个异常,这通常是不好的样式,例如您将隐式捕获SystemExit和其他您可能不应该与之交互的内部异常