Python 与实际文本无关的奇怪语法错误
bizarre syntax error with Python unrelated to actual text
我在 Python 和 IDLE 3.4 中遇到奇怪的语法错误
我正在修改一些旧代码。大量的用'''注释掉
直到昨天,只要我能调试代码,一切都很好。
然后我对代码做了一个小改动,在一些旧代码中出现了语法错误,而这些旧代码在前 10 次运行中语法上没有问题。
elif 关键字中的 eli 显然有误。我删除并重新输入了 elif。没有变化。
这不是我没有处理的代码。所以我 # 注释掉了这一行。
现在 elif 关键字中的 el 显然是错误的。请注意,这现在在评论中!
我用'''屏蔽了整个文本
现在 ''' 中的第三个 ' 已成为语法错误。
我怀疑有非法字符未显示。我将整个程序文本复制到编辑器中。然后再次将其复制到 IDLE/Python.
的新实例
同样的问题。
今天我重新开始了整个过程。除了移动语法错误的位置(目前它在我通过添加大量 LF 创建的一些空文本的中间)之外,语法错误仍然存在,与程序文本完全无关。
在我看来,错误似乎出现在程序文本中的固定点上。
有什么想法吗?
编辑 - 我已经添加了代码。当我修改文本时,语法错误再次移动:
if VerificationType == 4 : # I&E
VerifTypecount4 += 1
if AD : VT4defcount += 1
elif Day14Missed : VT4d14count += 1
elif VerificationType == 3 :
VerifTypecount3 += 1
if AD : VT3defcount += 1
elif Day14Missed : VT3d14count += 1
elif VerificationType == 2 :
VerifTypecount2 += 1
if AD : VT2defcount += 1
elif Day14Missed : VT2d14count += 1
else :
VerifTypecount1 += 1 # Catch all
if AD : VT1defcount += 1
elif Day14Missed : VT1d14count += 1
您继承的代码格式真的很糟糕。
(并且查看变量名称,它也可以进行一些重构,例如使用字典。)
在代码上使用像 pep8
or flake8
这样的检查器来查找并帮助您解决此类问题。
当您 运行 通过这些检查程序时,您的代码通常不应产生 任何 错误。
您甚至可以使用 autopep8
为您修复格式错误。
愚蠢的答案是在大约 100 行之前的打印语句中缺少右括号!
不知何故 python 语法分析器一定混淆了缺少的括号和下面的一些 ''' 被用来注释掉不需要的旧代码。这就是为什么有时错误被放置在注释掉的部分中的原因。
或者,解析器可能对括号对之间的距离设置了最大长度,超过此最大值后,它会发布语法错误。
不幸的是,IDLE 和 GEDIT 都忽略了缺少的括号并正确地看到了“”以清除不需要的代码,所以我误导了寻找接近语法错误标记位置的错误。
感谢大家的评论。
我在 Python 和 IDLE 3.4 中遇到奇怪的语法错误 我正在修改一些旧代码。大量的用'''注释掉 直到昨天,只要我能调试代码,一切都很好。 然后我对代码做了一个小改动,在一些旧代码中出现了语法错误,而这些旧代码在前 10 次运行中语法上没有问题。
elif 关键字中的 eli 显然有误。我删除并重新输入了 elif。没有变化。
这不是我没有处理的代码。所以我 # 注释掉了这一行。 现在 elif 关键字中的 el 显然是错误的。请注意,这现在在评论中!
我用'''屏蔽了整个文本 现在 ''' 中的第三个 ' 已成为语法错误。
我怀疑有非法字符未显示。我将整个程序文本复制到编辑器中。然后再次将其复制到 IDLE/Python.
的新实例同样的问题。
今天我重新开始了整个过程。除了移动语法错误的位置(目前它在我通过添加大量 LF 创建的一些空文本的中间)之外,语法错误仍然存在,与程序文本完全无关。
在我看来,错误似乎出现在程序文本中的固定点上。
有什么想法吗?
编辑 - 我已经添加了代码。当我修改文本时,语法错误再次移动:
if VerificationType == 4 : # I&E
VerifTypecount4 += 1
if AD : VT4defcount += 1
elif Day14Missed : VT4d14count += 1
elif VerificationType == 3 :
VerifTypecount3 += 1
if AD : VT3defcount += 1
elif Day14Missed : VT3d14count += 1
elif VerificationType == 2 :
VerifTypecount2 += 1
if AD : VT2defcount += 1
elif Day14Missed : VT2d14count += 1
else :
VerifTypecount1 += 1 # Catch all
if AD : VT1defcount += 1
elif Day14Missed : VT1d14count += 1
您继承的代码格式真的很糟糕。 (并且查看变量名称,它也可以进行一些重构,例如使用字典。)
在代码上使用像 pep8
or flake8
这样的检查器来查找并帮助您解决此类问题。
当您 运行 通过这些检查程序时,您的代码通常不应产生 任何 错误。
您甚至可以使用 autopep8
为您修复格式错误。
愚蠢的答案是在大约 100 行之前的打印语句中缺少右括号!
不知何故 python 语法分析器一定混淆了缺少的括号和下面的一些 ''' 被用来注释掉不需要的旧代码。这就是为什么有时错误被放置在注释掉的部分中的原因。
或者,解析器可能对括号对之间的距离设置了最大长度,超过此最大值后,它会发布语法错误。
不幸的是,IDLE 和 GEDIT 都忽略了缺少的括号并正确地看到了“”以清除不需要的代码,所以我误导了寻找接近语法错误标记位置的错误。
感谢大家的评论。