IPython错误行和列

IPython错误行和列,python,debugging,numpy,ipython,Python,Debugging,Numpy,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, :]

在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.

假设我正确理解了您的问题,请更改:

dQ0 = (Knm0[u, :] + W0[u, u] - Knm0[u, ma]) - multiply((Kn0[u]), (Km0 + Kn0[u] - Km0[ma])) / s0  

以此类推,将大问题分割成不同的部分,直到你确切地知道问题所在


复杂的oneliner语句使代码更难调试或在数月/数年后更难理解,或者让没有编写代码的其他人更难理解。通常,调试这些代码的最短方法是:

In [5]: %debug
(如果启用了
%automagic
,则只需
调试即可)。这将使您进入发生故障的调试器。然后,您可以转储不同的对象,即
Knm0
Kn0
等,或者尝试不同的块,如
Knm0[u,:]
,然后查看哪个块抛出错误,对象看起来是什么样的,等等

在您的情况下,看起来您试图在非数组的对象上使用切片,例如执行
245[0]
是不合法的。所以问题不在于哪一列——这一行根本不是问题所在,它很可能是上面的某一行生成了这一行使用的变量,这些变量实际上存在错误

In [5]: %debug