我花了一整天的时间来追踪这个错误:
for idx, val in enumerate(some_list): for idx, otherval in enumerate(another_list): #the idx for the outer loop is overwritten #blah blah
来自强烈的语言背景,我对此感到很难受。在强类型语言中,我会收到有关变量重新声明的错误。我不知道为什么翻译不会对此发出警告,以及此背后的设计决策。这显然是一个错误,我的意思是,这个构造的合法用途是什么?是否有任何选项可以启用此类检查?感谢。
答案 0 :(得分:4)
无法启用此类检查。通常我建议使用linting工具,但pylint
(我最喜欢的)似乎没有注意到这一点,pychecker
也没有。
至于理由:你想要允许像
这样的东西a = 1
a = 2
好的,那怎么样呢
a = ""
a = 1
那应该也可以。现在怎么样
a = 1
for a in range(5):
你看到了问题吗?它不是那么清楚应该是什么错误/警告,什么不应该。
(我承认我希望用pychecker
之类的工具抓住这个东西,我有点失望。)
答案 1 :(得分:2)
这就是Python的工作原理,您可以自由地重新定义变量。如果你希望它表现得像一个静态类型的语言,那你只会感到失望。