为了账号安全,请及时绑定邮箱和手机立即绑定

如何正确忽略异常

如何正确忽略异常

慕工程0101907 2019-06-23 15:51:51
如何正确忽略异常当您只想尝试-除了不处理异常的情况下,如何在Python中完成呢?以下是正确的方法吗?try:     shutil.rmtree(path) except:     pass
查看完整描述

3 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

通常认为最好的做法是只捕捉你感兴趣的错误。如属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并更改ifif e.errno == errno.ENOENT:


查看完整回答
反对 回复 2019-06-23
?
HUH函数

TA贡献1836条经验 获得超4个赞

当您只想在不处理异常的情况下执行TRY CATCH时,如何在Python中执行呢?

这取决于你所说的“处理”是什么意思。

如果你想在不采取任何行动的情况下抓住它,那么你发布的代码就会起作用。

如果您的意思是要在不阻止异常上升的情况下对异常采取行动,那么您需要如下所示:

try:
    do_something()
except:
    handle_exception()
    raise  #re-raise the exact same exception that was thrown


查看完整回答
反对 回复 2019-06-23
  • 3 回答
  • 0 关注
  • 864 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信