通常认为最好的做法是只捕捉你感兴趣的错误。如属shutil.rmtree可能是OSError:>>> shutil.rmtree("/fake/dir")
Traceback (most recent call last):
[...]
OSError: [Errno 2] No such file or directory: '/fake/dir'
如果您想要默默地忽略该错误,请执行以下操作:try:
shutil.rmtree(path)
except OSError:
pass
为什么?假设您(不知怎么地)不小心将函数传递为整数而不是字符串,如下所示:shutil.rmtree(2)
它会造成错误TypeError:胁迫Unicode:需要字符串或缓冲区,int找到-您可能不想忽略这一点,这可能很难调试。
如果你一定要忽略所有错误,捕获Exception而不是光秃秃的except:声明。再说一遍,为什么?
不指定异常捕获每一,每个异常,包括SystemExit异常,例如sys.exit()用途:>>> try:
... sys.exit(1)
... except:
... pass
...
>>>
将其与正确退出的以下内容进行比较:>>> try:
... sys.exit(1)
... except Exception:
... pass
...
shell:~$
如果您想编写更好的行为良好的代码,OSError异常可以表示各种错误,但在上面的示例中,我们只想忽略Errno 2因此,我们可以更加具体地:try:
shutil.rmtree(path)
except OSError, e:
if e.errno == 2:
# suppress "No such file or directory" error
pass
else:
# reraise the exception, as it's an unexpected error
raise
你也可以import errno并更改if到if e.errno == errno.ENOENT: