2014-03-12 31 views
3

是否有可能在IPython交互式控制台中显示不仅是错误发生的行,而且还显示列?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. 

回答

1

通常,调试这些最短路径很简单:

In [5]: %debug 

(或只是debug如果%automagic上)。这会使您陷入发生故障的调试器中。然后,你可以转储对象的不同,即Knm0Kn0等,或尝试像Knm0[u,:]不同的部分,看看哪一个引发错误,是什么物体看起来像等

在你的情况下,它看起来像你试图在不是数组的情况下使用切片,比如做245[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语句使代码更难以调试或了解月/年后,或由其他人谁没有写你的代码