关于python:绕过错误并继续代码

Bypass error and continue code

这是我之前遇到的一个简单问题。从本质上讲,像这样和这样的"忽略"异常的解决方案确实不存在。即使它们不再崩溃python,它们仍然会停止初始try子句中的任何代码。

1
2
3
4
5
try:
    assert False
    print"hello"
except AssertionError:
    pass

这段代码不会打印"你好",而是跳过它,转到通行证。我的问题是,在python 2.7中是否有一种简单的方法可以真正忽略这一点?我阅读了3.4中的一些内容,以使这更容易,但我宁愿继续使用Python2.7。


我认为你不能,我认为你不应该。

Errors should never pass silently.
Unless explicitly silenced.

Zen of Python

这意味着作为一个程序员,您有责任思考异常可能出现在哪里以及为什么会出现。您应该(实际上必须)避免在try语句中放入一个长代码块,然后考虑异常。正确的思维方式是:

  • assert False
  • 注意,它可能引发断言错误
  • assert False放在try...except...块中
  • print 'Hello'
  • 注意这一行不会引起任何错误(顺便说一下,著名的最后一个词)
  • 利润
  • 所以您的代码应该是这样的(其他答案也很好):

    1
    2
    3
    4
    5
    try:
        assert False
    except AssertionError:
        pass
    print 'Hello'

    您可以使用finally

    1
    2
    3
    4
    5
    6
    7
    8
    9
    try:
        assert False
        print"Hello"
    except AssertionError:
        pass
    finally:
        print"This prints no matter what"

    This prints no matter what

    如果您希望在没有发生错误的情况下执行代码块,可以使用try except else构造。


    如果else块没有发生错误,则移动希望发生的操作:

    1
    2
    3
    4
    5
    6
    try:
        assert False
    except AssertionError:
        print"error"
    else:
        print"no error"