我正在寻找奇怪行为的潜在原因。
我观察到的代码已被替换。此外,恢复到现在发生的提交会产生不同的结果。
我担心这是其他东西的症状,以后可能会回来咬我。
问题是应用程序会在这个简单的行上崩溃:
if self.user.user_type in [0,1]:
说列表索引超出范围。
在该行之前放一个ipdb.set_trace
右边,并运行命令“ p self.user.user_type
”将正确打印 0。
键入“ next
”会起作用。输入“ continue
”会崩溃,说list index out of range
。
也许 1/10 次尝试,“ continue
”会起作用,但稍后会在不相关的行上崩溃,但仍然向我显示上面的行作为错误的原因。
持续点击“ next
”最终也会在其他不相关的行上崩溃,但也会显示原始的“ if self.user.user_type in [0,1]:
”作为错误的来源。
当我第一次遇到这个问题时,我没有尝试更新 ipdb 和 ipython,但是在更新两者后现在恢复到该提交仍然在不相关的行上崩溃后在回溯中显示不正确的行。无辜线路上的崩溃不再发生。
我已经在 C 中处理了相当多的内存损坏错误,但是我对 python 比较陌生,不知道是什么可能导致这种情况。
应用程序中没有什么太疯狂的事情,它只是一个 http 请求,由 处理Tornado
,然后启动我的处理程序类,这就是发生这种情况的地方。
也没有多线程。