【发布时间】:2014-09-22 22:49:59
【问题描述】:
假设我有以下函数/方法,它计算一堆东西,然后设置很多变量/属性:calc_and_set(obj)。
现在我想做的是用不同的对象多次调用该函数,如果一个或多个失败,那么什么都不应该设置。
我以为我可以这样做:
try:
calc_and_set(obj1)
calc_and_set(obj2)
calc_and_set(obj3)
except:
pass
但这显然行不通。例如,如果错误发生在对函数的第三次调用中,那么第一次和第二次调用将已经设置了变量。
谁能想到一种“干净”的方式来做我想做的事?我能想到的唯一解决方案是相当丑陋的解决方法。
【问题讨论】:
-
没有内置或简单的方法可以做到这一点;您必须保存原始状态才能返回,或者有一些方法可以撤消更改并在失败时展开它们。
-
@DSM 这或多或少是相反的,不是吗?我想,这里的 OP 想要要么全部要么什么都不想要。
-
@jonrsharpe:是的,你是对的。我在 OP 的解释中添加了一些词,直到它匹配.. :-/
-
@jonrsharpe:我写“丑陋的变通办法”时就是这么想的……
-
@Aniss:乔恩说得很好——恰恰相反。在那里,OP 想要单独控制,而不必复制 try/excepts。您希望能够还原整个事情,如果您的函数是纯函数(即无副作用),这相对容易做到,否则很难。
标签: python function variables try-catch statements