【问题标题】:Python: Execute Exception code only if not caughtPython:仅在未捕获时才执行异常代码
【发布时间】:2021-04-15 15:52:34
【问题描述】:

假设我想让一个异常总是触发一些代码,比如写一个文件或调用一个外部程序,但前提是它没有被捕获。我该怎么做?

一个无效的例子:

class MyError(Exception):
    def __init__(self):
        with open('foo.txt', 'a') as stream:
            stream.write("Something bad happened.\n")

try:
    raise MyError()
except:
    print("Just kidding.")

【问题讨论】:

    标签: python exception try-catch


    【解决方案1】:

    将代码放在围绕整个脚本的try/except 块中。

    try:
        main()
    except MyError:
        with open('foo.txt', 'a') as stream:
            stream.write("Something bad happened\n")
    

    如果main() 中的任何内容捕获到异常,则不会在此处捕获,因此不会记录任何内容。

    【讨论】:

    • 我的目标是import 其他程序中的异常,如果没有被捕获,总是让它执行指定的操作,这就是为什么我希望代码存在于异常类本身中。我确实意识到这不是异常的常见任务,但我认为它仍然是可能的。
    • 我认为这不可能。我不认为异常对象参与了捕获过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2018-11-18
    • 2012-03-30
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多