我不熟悉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)
我在问这个问题之前搜索了一下,所以希望我的问题不是多余的。
谢谢!
答案 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而引发的异常;这种不正确的使用表明代码中的某个错误,而作为开发人员,你真的想知道出了什么问题,以及在哪里。