【发布时间】:2022-11-12 18:26:19
【问题描述】:
我正在做一个项目,我需要提取-> 上传-> 从源到目的地删除数据。
虽然“for”循环获取每个表名并一次运行一个(提取/上传/删除)函数,但对于每个表,我希望所有三个函数都运行,如果其中一个或多个函数失败,则没有一个该功能将运行。
为简单起见,我有一个虚拟循环,我知道前两个语句会运行,但第三个语句会失败。但是我如何以某种方式设置循环,以便它们全部运行,或者如果有一个错误,那么它们都不会运行。
table = ['tempA', 'tempB']
extract = 'extract data'
upload = 'upload data'
for x in table:
print(f"{x} table {extract}")
print(f"{x} table {upload}")
print(f"{x} table {delete}")
我尝试了“try”和“except”,但最终为两个表运行了前两个打印语句,并给了我最后一个的错误消息。
for x in table:
try:
print(f"{x} table {extract}")
print(f"{x} table {upload}")
print(f"{x} table {delete}")
except Exception as e:
print(e)
【问题讨论】:
-
这是不可能的。您将无法知道函数在调用之前是否会失败。
-
你想要的是一个事务机制,它仍然单独运行函数,但可以展开效果较早的,如果任何后来的失败。如果您使用的是实际数据库,则几乎可以肯定这是可用的。
-
看看我的回答。
-
就像 Michael M. 所说的那样,这在 python 中是不可能的,因为 python 只知道函数在调用时会失败。也就是说,你的桌子住在哪里?如果是 SQL,则在失败时回滚事务是一种标准做法,应该可以实现您的目标? (SQL alchemy 是一个 Python 库,对这种行为有很好的支持)