IPython错误行和列

2024-05-28 20:24:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 脚本错误ipython语句multiplymaw0dq1
2条回答

通常,最短的调试方法是:

In [5]: %debug

(或者如果%automagic处于启用状态,则仅debug)。这会将您放入发生故障的调试器中。然后您可以转储不同的对象,即Knm0Kn0,等等,或者尝试不同的块,比如Knm0[u,:],看看哪个抛出了错误,对象是什么样子,等等

在您的案例中,似乎您试图对非数组的内容使用切片,例如执行245[0]是不合法的。所以问题并不是哪一列那么简单-这一行根本不是问题所在,它很可能是上面的某一行生成了这一行使用的变量,而这些变量实际上存在错误。你知道吗

假设我正确理解了你的问题,改变一下:

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语句使代码在数月/数年后更难调试或理解,也更难被其他没有编写您的代码的人理解

相关问题 更多 >

    热门问题