我有一个With
语句,如果某个<condition>
满足,我想跳过它。就是我写,
With MyContext() as mc:
do_something()
及
class MyContext(object):
...
def __enter__(self,...):
if <condition>:
JumpToExit()
def __exit__(self,...):
print('goodbye')
我希望do_something()
只在某些条件下执行,否则我希望JumpToExit()
完全跳过主体,只完成块
谢谢
Tags:
我不确定这是否可能
__enter__
是在with
语句引入的try
块之外执行的,因此我看不到直接从__enter__
跳到__exit__
的方法with
基本上(简化)是这样的:进入
您需要在
do_something()
中抛出一个异常,或者成功完成它以进入__exit__
。如果您确实从do_something()
抛出异常,您可以在退出函数中(使用传递给它的一些参数)抑制异常,这样您就看不到它了。但是它必须是with
块中的代码,它以某种方式导致跳转到__exit__
也许,如果您可以通过在
__enter__
中设置一些值来确保do_something
立即抛出异常,那么您就可以使它正常工作。但对我来说,这听起来不是个好主意您可以将with语句放入函数中并使用return:
这是不可能的。with语句无法取消该块。但是,您可以这样做:
然后,当您使用上下文时:
如果您还想返回其他内容,您可以返回类似
return condition, self
的元组,然后使用它,您可以解压缩类似with condition, context:
的元组相关问题 更多 >
编程相关推荐