gpt4 book ai didi

python - 为什么调用 pdb.set_trace() 时此测试会崩溃?

转载 作者:行者123 更新时间:2023-12-03 19:47:45 24 4
gpt4 key购买 nike

下面是简单的单元测试。

如果我在没有“test”作为参数的情况下运行它(例如,python -m unittest module_name),它就会通过。如果我使用“test”作为参数运行它,我会得到“TypeError:内置操作的参数类型错误”。为什么?

from io import StringIO
import sys
from unittest import TestCase

class TestSimple(TestCase):
def test_simple(self):
old_stdout = sys.stdout
buf = StringIO()
try:
sys.stdout = buf
print('hi')
finally:
import pdb
if 'test' in sys.argv:
pdb.set_trace()
sys.stdout = old_stdout

contextlib.redirect_stdout 版本:

from contextlib import redirect_stdout
from io import StringIO
import pdb
import sys
from unittest import TestCase

class TestSimple(TestCase):
def test_simple(self):
buf = StringIO()
with redirect_stdout(buf):
print('hi')
pdb.set_trace()
print('finis')

提前致谢。

编辑:原始程序在 Debian 和 Windows 7 中的 Python 3.4 中进行了测试。

类似的东西(使用环境标志而不是命令行参数)似乎在 Python 2 中挂起,但按 c 可以让它完成,所以我猜测这可能只是 pdb 的 UI 已被重定向。但是 Python尽管一位同事在 Mac OS 上的 3.4 版本上进行了测试并看到了“挂起”行为,但 3.3 版本具有最初描述的行为(崩溃)。

最佳答案

您需要为pdb提供原始的stdout:

pdb.Pdb(stdout=sys.__stdout__).set_trace()

关于python - 为什么调用 pdb.set_trace() 时此测试会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35186841/

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