Python没有警告变量重新声明

时间:2014-03-05 00:22:07

标签: python

我花了一整天的时间来追踪这个错误:

for idx, val in enumerate(some_list):
    for idx, otherval in enumerate(another_list): #the idx for the outer loop is overwritten
        #blah blah

来自强烈的语言背景,我对此感到很难受。在强类型语言中,我会收到有关变量重新声明的错误。我不知道为什么翻译不会对此发出警告,以及此背后的设计决策。这显然是一个错误,我的意思是,这个构造的合法用途是什么?是否有任何选项可以启用此类检查?感谢。

2 个答案:

答案 0 :(得分:4)

无法启用此类检查。通常我建议使用linting工具,但pylint(我最喜欢的)似乎没有注意到这一点,pychecker也没有。

至于理由:你想要允许像

这样的东西
a = 1
a = 2

好的,那怎么样呢

a = ""
a = 1

那应该也可以。现在怎么样

a = 1
for a in range(5):

你看到了问题吗?它不是那么清楚应该是什么错误/警告,什么不应该。

(我承认我希望用pychecker之类的工具抓住这个东西,我有点失望。)

答案 1 :(得分:2)

这就是Python的工作原理,您可以自由地重新定义变量。如果你希望它表现得像一个静态类型的语言,那你只会感到失望。