绕过错误并继续代码

5 投票
3 回答
11801 浏览
提问于 2025-04-18 01:31

我之前遇到了一个简单的问题。基本上,像这样的解决方案这个,说是可以“忽略”异常,但实际上并不能真正做到。即使它们不再让Python崩溃,但它们仍然会停止执行最初的try代码块中的其他代码。

try:
    assert False
    print "hello"
except AssertionError:
    pass

这段代码将不会打印“hello”,而是会跳过它,直接到pass那一行。我的问题是,在Python 2.7中,有没有简单的方法可以真正忽略这个问题?我听说在3.4版本中有一些改进可以让这件事变得更简单,但我还是想继续使用Python 2.7。

3 个回答

1

把你希望在没有发生错误的情况下执行的内容放到一个else块里:

try:
    assert False
except AssertionError:
    print "error"
else:
    print "no error"
3

你可以使用 finally

try:
    assert False
    print "Hello"
except AssertionError:
    pass
finally:
    print "This prints no matter what"

This prints no matter what

如果你想在没有发生错误的情况下执行一段代码,可以使用 try except else 这个结构。

4

我觉得你可能做不到,而且也不应该这样做。

错误不应该悄悄溜走。
除非你明确地让它们安静。

Python的哲学

这意味着作为程序员,你有责任去思考错误可能在哪里出现,以及为什么会出现。你应该(其实是必须)避免把一大段代码放在一个try语句里,然后再考虑错误。正确的思考流程是:

  1. 写下assert False
  2. 注意到这可能会引发一个AssertionError(断言错误)
  3. assert False放在一个try...except...块里
  4. 写下print 'Hello'
  5. 注意到这一行不会引发任何错误(顺便说一下,这可是著名的最后一句话)
  6. 获利

所以你的代码应该像这样(其他答案也很不错):

try:
    assert False
except AssertionError:
    pass
print 'Hello'

撰写回答