我有一个很奇怪的问题。我正在研究一些Python 2.7脚本,并在Sublime 3中对其进行编辑。
现在,该脚本运行了,但似乎表现得“不合逻辑”,这意味着它没有遵循我的逻辑。例如,有时它不会进入if / else语句。
编辑:
一段时间后,我能够轻松进行复制。查看下面的屏幕截图,并注意第11行的缩进螺丝。当然,请不要介意代码的逻辑(没有逻辑),这只是为了说明我的观点。
如果我从终端运行,则得到输出
new key
new key
new key
new key
new key
Value already exists
,您会看到打印语句比预期的要少。例如,如果我修复缩进使其与所有选项卡保持一致,则会得到期望的输出:
new key
new key
Value already exists
Value already exists
new key
new key
Value already exists
Value already exists
new key
{1: [1], 2: [2], 3: [3], 4: [4], 9: [9]}
基本上,问题是。这是某种错误吗?为什么代码会产生“不合逻辑”的输出,而不是抛出某种缩进错误?
原始帖子:
我举一个例子。假设我有一个类似pandas数据框df的东西,在某个时候我在行上循环。
d = {}
for index, row in df.iterrows():
base = row['base']
s1 = row['string_1']
s2 = row['string_2']
if base not in d:
d[base] = [sorted([s1,s2])]
# do something
else:
if sorted([s1,s2]) not in d[base]:
d[base].append(sorted([s1,s2]))
# do something
else:
pass
现在,基本上看来,当我有时运行脚本(不知道基于什么)时,它似乎完全跳过了if / else语句。同样,脚本正在运行,但是不遵守代码中编写的逻辑。我无数次手动检查,无法理解。
过了一会儿,我记得一段时间前发生了类似的事情,我只是单击Sublime的右下角以“将缩进转换为制表符”。这似乎解决了问题。 (有时我可能已经从其他编辑器复制并粘贴了一行)。
困扰我的是我真的不知道发生了什么。如果有一些缩进问题,我会期望出现错误,而不是代码在没有明显逻辑的情况下运行。调试真的很痛苦。
其他人也经历过同样的经历,并且知道这是由于什么造成的吗?