Python样式:捕获异常只是为了打印它们

时间:2014-07-31 10:38:41

标签: 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 doesn't exist'

或者是尝试/除了捕获错误并继续做其他事情尽管有错误(程序否则会失败)的目的? E.g:

my_func(path):
    try:
        some_func_that_opens_file(path) # this would raise and IOError by itself
    except IOerror:
        fixed = fix_path(path) # makes the path what it needs to be
        some_func_that_opens_file(fixed)

我在问这个问题之前搜索了一下,所以希望我的问题不是多余的。

谢谢!

1 个答案:

答案 0 :(得分:2)

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

您处理代码中 not 错误的异常;有时处理异常比检测异常发生的可能性更有效。这被称为要求宽恕而不是要求许可

例如,在字典中的列表中收集信息。你可以使用:

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​​而引发的异常;这种不正确的使用表明代码中的某个错误,而作为开发人员,你真的想知道出了什么问题,以及在哪里。