在Python中,是否可以编写一个语句块,以便在出现异常时回滚整个语句块?

2024-05-23 22:57:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我的python代码看起来像这样-

try:
    statement1
    statement2
    statement3
except Exception:
    handleException

问题是,如果statement3生成异常,那么statement1和statement2的效果已经发生,并且我无法在except部分中撤消它们。有没有一个简单的方法来写这样的东西-

check if the following block runs without exceptions:
    statement1
    statement2
    statement3
if yes:
    run entire block
if no:
    handleException

(基本上类似于Python代码的事务原子性)。你知道吗


Tags: the方法代码ifcheckexceptionblockfollowing
2条回答

你要做的是让Python做一些事情,看看它是否有效,然后做它,否则,一开始就不做它。这违反了因果关系。你知道吗

为了处理这类问题,我们通常使用上下文管理器,例如:

with db.transaction():
    entire_block()

如果它们写得好的话,在发生异常时应该为您处理回滚部分。你知道吗

用一个特别的武断的说法,不

如果必须有这样的细粒度撤消,最好使用命令模式在块中写入项,在继续进行每个操作时为每个操作堆叠一个撤消操作。如果你到了最后,一切正常,你擦堆栈,删除所有的撤消;如果你有一个例外,你弹出一个又一个撤消堆栈,并反向执行,以恢复原始状态。你知道吗

相关问题 更多 >