Python风格:捕获异常只是为了打印它们

Python风格:捕获异常只是为了打印它们,python,exception-handling,styles,pep8,Python,Exception Handling,Styles,Pep8,我对Python中的错误处理没有太多经验,我想知道,就风格而言,是否值得捕获和打印那些在代码中没有显式处理的错误 例如: my_func(path): try: some_func_that_opens_file(path) # this would raise and IOError by itself except IOerror as ex: print ex # or alternatively print 'your file does

我对Python中的错误处理没有太多经验,我想知道,就风格而言,是否值得捕获和打印那些在代码中没有显式处理的错误

例如:

my_func(path):
    try:
        some_func_that_opens_file(path) # this would raise and IOError by itself
    except IOerror as ex:
        print ex  # or alternatively print 'your file doesn't exist'
或者,尝试/排除的目的是捕获错误并继续执行其他操作,而不考虑错误(否则程序将失败)?例如:

在问这个问题之前我搜索了很多,希望我的问题不是多余的


谢谢大家!

处理异常以使代码继续;另一种方法是让默认处理程序(就在解释器退出之前)打印回溯

您处理的异常不是代码中的错误;有时,处理异常比测试异常发生的可能性更有效。这叫做请求原谅,而不是请求允许

以收集字典列表中的信息为例。您可以使用:

if key not in dictionary:
    dictionary[key] = ['default', 'initial', 'value']
listval = dictionary[key]
listval.extend(['other', 'values'])
那就是请求许可,而:

try:
    listval = dictionary[key]
except KeyError:
    listval = dictionary[key] = ['default', 'initial', 'value']
listval.extend(['other', 'values'])
就是请求原谅。它显式地使用异常处理;如果缺少密钥的情况是例外(不常见),那么请求原谅比请求许可要快

如果错误是由最终用户造成的,并且是可以预料到的,那么您还需要处理异常,因为您的程序以一个难看的回溯停止对用户不友好


但由于不正确使用API而引发的异常不应被捕获;这种不正确的使用表明代码中的某个地方存在错误,作为开发人员,您很想知道哪里出了问题,哪里出了问题。

如果您发现了错误,就不会出现错误。
try:
    listval = dictionary[key]
except KeyError:
    listval = dictionary[key] = ['default', 'initial', 'value']
listval.extend(['other', 'values'])