在Python中如何引发延迟异常?

4
我想知道 Python 中是否有一个标准机制可以满足这个用例:
try:
    do_a()
    if something_happens():
        raise DelayedException # is really only raised after do_b()
    do_b()
except DelayedException as de:
    # handle de after the entire try/except block completed

显然,我可以将异常信息存储在变量中以便稍后处理,但我想知道Python(3.x 如果有区别的话)是否内置了这样的机制。

编辑: 为了澄清,在我的用例中,异常处理需要 do_b() 的结果。


如果 do_b() 引发了自己的异常,您希望发生什么? - Scott Hunter
2
do_something() 包装在一个 try-finally 块中(并在 finally 块中包含 do_b())不就可以实现这个功能吗? - dhke
2
不,没有这个东西。这似乎不是异常情况的使用案例;只需记录错误并稍后检查即可。 - user2357112
除非你是想在第一个try语句中再嵌套一个try,并将finally语句附加到新的try上,否则我认为这会造成相当混乱的代码结构。 - user2357112
看起来这就是你的意思。 - user2357112
显示剩余2条评论
1个回答

2

是的,但它很丑陋:

try:
    do_a()
    try:
        if do_something():
            raise DelayedException()
    finally:
        do_b()
except DelayedException:
    pass

确实有点丑!我读了几遍才明白这是如何工作的,所以我想这不是个好兆头,可能使用变量会使意图更清晰。 - Laurent S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接