【问题标题】:raise delayed exception in python?在python中引发延迟异常?
【发布时间】:2017-02-09 18:30:44
【问题描述】:

我想知道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() 引发了自己的异常,您希望发生什么?
  • 不将 do_something() 包装在 try-finally 块中(do_b() 在 finally 块中)这样做?
  • 不,不是一回事。这看起来不像是异常的用例;只需记录错误并稍后检查。
  • @dhke:在except 之后而不是之前运行do_b
  • @user2357112 你在想一个try-except-finally,是吗?要在异常处理程序之前获取 finally,您需要一个内部 try-finally 块。

标签: python python-3.x exception


【解决方案1】:

是的,但它很丑:

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

【讨论】:

  • 确实有点丑!我读了几遍才明白它是如何工作的,所以我猜这不是一个好兆头,可能使用变量会使意图更清晰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2014-06-05
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
  • 2012-12-08
相关资源
最近更新 更多