Python pdb.set_trace()是否总是覆盖错误回溯?

Python pdb.set_trace()是否总是覆盖错误回溯?,python,pdb,Python,Pdb,我有一个处理套接字的循环,我设置了一个pdb.set_trace()断点来停止并检查每次通过循环调用select.select()的结果。然而,我的代码中的其他地方也有bug,而且标准的回溯似乎被pdb.set_trace覆盖了。因此,当程序退出时,回溯指向set_trace()后面的行,而不是包含错误的行 有没有办法访问实际的回溯,或者pdb.set_trace()会阻止它 以下是相关的代码片段: while True: read_socks, write_socks, _ = sel

我有一个处理套接字的循环,我设置了一个pdb.set_trace()断点来停止并检查每次通过循环调用select.select()的结果。然而,我的代码中的其他地方也有bug,而且标准的回溯似乎被pdb.set_trace覆盖了。因此,当程序退出时,回溯指向set_trace()后面的行,而不是包含错误的行

有没有办法访问实际的回溯,或者pdb.set_trace()会阻止它

以下是相关的代码片段:

while True:
    read_socks, write_socks, _ = select.select(all_sockets, all_sockets, '')
    pdb.set_trace()

    if listen_socket.fileno() in read_socks:
        new_socket, address = listen_socket.accept()
        id_num = new_socket.fileno()
        all_sockets[id_num] = new_socket

    for id_num in write_socks:
        # do something that triggers an Assertion error
然后我得到如下回溯:

Traceback (most recent call last):
  File "socktactoe_server.py", line 62, in <module>
    if listen_sock.fileno() in read_socks:
AssertionError
输出:

Traceback (most recent call last):
  File "minimal_pdb_traceback.py", line 7, in <module>
    y = "line of code not triggering an error"
AssertionError
回溯(最近一次呼叫最后一次):
文件“minimal_pdb_traceback.py”,第7行,在
y=“未触发错误的代码行”
断言错误

看起来您在Python
pdb
模块中发现了一个bug!我可以在Python版本2.7、3.2和3.3中重现您的简单示例,而问题在Python 2.4、2.5、2.6或3.1中并不存在


乍一看,我并没有在系统中看到一个先前存在的bug。请在那里报告您的问题,包括您的最小测试用例,以及它可以在哪些python版本上复制。

set\u trace()
没有这样的功能;此时您应该点击调试提示,而不是得到一个
AssertionError
。您确定这就是您运行的代码吗?是的,我在循环中的每一次运行中都会按预期点击调试提示。我在pdb中使用“c”继续执行代码。在稍后的过程中,我得到了断言错误。请注意,回溯使用源代码的当前磁盘副本来查找行。如果在启动程序后更改了源代码,则可能会显示错误的行。这是因为编译后的字节码只存储一个行号和一个文件名,所以如果文件后来更改,文件中的索引是不正确的。有趣的是,我不知道这一点。然而,这里的情况并非如此。我本人是一个庞大的
pdb
用户,当然从未见过您描述的行为,因此我仍然会从这个方向寻找解释。
Traceback (most recent call last):
  File "minimal_pdb_traceback.py", line 7, in <module>
    y = "line of code not triggering an error"
AssertionError