在IPython交互式控制台中是否有可能不仅显示错误发生的行而且还显示列?
例如在这个脚本中,我知道有问题的行是934,但我无法找到哪个语句生成错误,因为我不知道该列。
--> 934 dQ0 = (Knm0[u, :] + W0[u, u] - Knm0[u, ma]) - multiply((Kn0[u]), (Km0 + Kn0[u] - Km0[ma])) / s0
935 dQ1 = (Knm1[u, :] + W1[u, u] - Knm1[u, ma]) - multiply((Kn1[u]), (Km1 + Kn1[u] - Km1[ma])) / s1
936 dQ = d0 * dQ0 - d1 * dQ1
IndexError: invalid index to scalar variable.
答案 0 :(得分:2)
假设我正确理解了您的问题,请更改:
dQ0 = (Knm0[u, :] + W0[u, u] - Knm0[u, ma]) - multiply((Kn0[u]), (Km0 + Kn0[u] - Km0[ma])) / s0
到
dummy0 = (Knm0[u, :] + W0[u, u] - Knm0[u, ma])
dummy1 = multiply((Kn0[u]), (Km0 + Kn0[u] - Km0[ma])) / s0
dQ0 = dummy0 - dummy1
依此类推,将大问题分成几块,直到你确切知道问题出在哪里
复杂的oneliner语句使代码更难以调试或在几个月/几年之后或者没有编写代码的其他人理解
答案 1 :(得分:1)
通常,调试这些的最短方法就是:
In [5]: %debug
(如果debug
已启用,则只需%automagic
)。这会使您进入发生故障的调试器。然后你可以转储不同的对象,即Knm0
,Kn0
等,或尝试不同的部分,如Knm0[u,:]
,看看哪一个抛出错误,对象是什么样的,等等。 p>
在您的情况下,您似乎正在尝试对不是数组的内容使用切片,例如执行245[0]
是不合法的。所以它不是问题哪一列那么简单 - 这条线根本就不是问题所在,它很可能在上面的一些线上生成了这条线使用的实际上有这个bug的变量