gpt4 book ai didi

python - Trace Bug 只在 CI 中偶尔发生

转载 作者:太空狗 更新时间:2023-10-29 21:23:48 28 4
gpt4 key购买 nike

我在 python 代码中有一个奇怪的错误,它有时只在 CI 中发生。

我们无法复制它。

测试代码在哪里:

response=self.admin_client.post(url, post)
self.assertEqual(200, response.status_code, response)

有时我们会收到 302,这是在表单保存后发生的。

我调试这个的想法:

with some_magic_trace.trace() as trace:
response=self.admin_client.post(url, post)
self.assertEqual(200, response.status_code, trace)

跟踪应该包含解释器执行的 python 行(文件名、行偏移、行作为字符串)。

如何实现some_magic_trace.trace()

最佳答案

trace模块为您提供了一个非常简单的解决方案(与您要求的不同,但足够简单,可以尝试一下。)

from trace import Trace

tracer = Trace()
response = tracer.runfunc(self.admin_client.post, url, post)
self.assertEqual(200, response.status_code, response)

一个更复杂的解决方案需要创建一个上下文管理器来保存跟踪并仅在异常时打印它,需要使用 sys.settrace .仅供您自己实现的模板可以是:

class MyTracer():

def __init__(self):
self.trace = None

def newscope(self, frame, event, arg):
## real work should be done here, just minimal example
self.trace.append((frame, event, arg))
return None

def pprint(self):
## real pretty printing of trace info should be done here
print(self.trace)

def __enter__(self):
self.trace = []
sys.settrace(self.newscope)
return self

def __exit__(self, exc_type, exc_val, exc_tb):
sys.settrace(None)
if exc_type is not None:
self.pprint()
## print some info gathered from exc_type, exc_val, exc_tb

然后你可以:

with MyTracer():
response=self.admin_client.post(url, post)
self.assertEqual(200, response.status_code, response)

这个想法是一个 MyTracer 实例有一个跟踪器方法 newscope,它在 self.trace 中保存一些有用的信息。在从上下文中异常退出时,将调用 pprint 方法;在正常退出时,跟踪信息将被丢弃。

大部分工作必须在跟踪方法 newscope 中完成。可以找到跟踪功能的一些具体示例 here .

关于python - Trace Bug 只在 CI 中偶尔发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34872918/

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