gpt4 book ai didi

python - 长时间运行的 python 脚本的故障安全

转载 作者:太空宇宙 更新时间:2023-11-03 13:48:22 24 4
gpt4 key购买 nike

这可能是有史以来最愚蠢的问题,但我想知道是否有一种方法可以围绕函数编写包装器(最好是装饰器),以便在发生以下情况时捕获局部变量的内部状态该函数中出现异常。它会在创建本地变量时捕获它们,pickle 它们,然后在没有引发异常的情况下处理它们,或者在发现任何异常时将它们写入文件。

这是不是太离奇了,或者有人玩过这样的东西吗?

最佳答案

您可以捕获 f_locals variable on a frame in the traceback :

import sys
import functools

def capturelocals(func):
@functools.wraps(func)
def wrapperfunc(*args, **kw):
try:
return func(*args, **kw)
except Exception:
_, _, tb = sys.exc_info()
try:
while tb.tb_next is not None:
tb = tb.tb_next # find innermost frame
locals = tb.tb_frame.f_locals
print locals
finally:
del tb # prevent leaking tracebacks
raise
return wrapperfunc

为了证明它有效:

>>> @capturelocals
... def foobar():
... foo = 'bar'
... spam = 'eggs'
... raise ValueError('Bam!')
...
>>> foobar()
{'foo': 'bar', 'spam': 'eggs'}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in wrapperfunc
File "<stdin>", line 5, in foobar
ValueError: Bam!

关于python - 长时间运行的 python 脚本的故障安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14719363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com