Python语句,继续

时间:2013-11-29 15:50:25

标签: python exception with-statement

我正在使用python开发一个程序,并且达到了一个我不知道如何解决的问题。 我的意图是使用with语句,避免使用try / except。

到目前为止,我的想法是能够使用continue语句,因为它将在except中使用。但是,我似乎没有成功。

让我们假设这是我的代码:

def A(object):
    def __enter__:
        return self

    def __exit__:
        return True

with A():
    print "Ok"
    raise Exception("Excp")
    print "I want to get here"

print "Outside"

阅读文档我发现通过在__exit__方法中返回True,我可以阻止异常传递,就像使用pass语句一样。但是,这将立即跳过在with中留下的所有内容,我正试图避免,因为我希望所有内容都被执行,即使引发了异常。

到目前为止,我还没有找到办法做到这一点。任何意见,将不胜感激。 非常感谢你。

3 个答案:

答案 0 :(得分:4)

这是不可能的。

只有两个选项是(a)通过返回false-y值来传播异常,或者(b)通过返回True来吞下异常。无法从抛出异常的位置恢复代码块。无论哪种方式,您的with区块都已结束。

答案 1 :(得分:1)

你做不到。 with语句的目的是自动处理清理(这就是为什么可以在退出时抑制异常),而不是作为Visual Basic臭名昭着的On Error Resume Next

如果要在引发异常后继续执行块,则需要在try/except语句中包装引发异常的任何内容。

答案 2 :(得分:0)

虽然大多数答案都是正确的,但我担心没有人能解决我的问题(我知道我没有提供完整的代码,对不起)。

我已经用另一种方法解决了这个问题。我希望能够在With中处理NameError(“未声明的变量”)。如果发生这种情况,我会查看我的对象中的该变量,然后继续。

我现在使用globals()来声明变量。这不是最好的,但它实际上是有效的,让我们继续,因为没有异常正在上升。

谢谢大家!