如何正确忽略异常

如何正确忽略异常

当您只想尝试-除了不处理异常的情况下,如何在Python中完成呢?

以下是正确的方法吗?

try:
    shutil.rmtree(path)
except:
    pass


慕工程0101907
浏览 865回答 3
3回答

慕神8447489

通常认为最好的做法是只捕捉你感兴趣的错误。如属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:

HUH函数

当您只想在不处理异常的情况下执行TRY CATCH时,如何在Python中执行呢?这取决于你所说的“处理”是什么意思。如果你想在不采取任何行动的情况下抓住它,那么你发布的代码就会起作用。如果您的意思是要在不阻止异常上升的情况下对异常采取行动,那么您需要如下所示:try:     do_something() except:     handle_exception()     raise  #re-raise the exact same exception that was thrown
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python