python:在循环中赋值之前避免使用变量的bug

max*_*max 2 python coding-style namespaces

for element in container:
  # some code here
  temp_variable = f1(element)
  # more code

# much later in the code

for element in container:
  # some code
  another_variable = g(temp_variable)
  # more code
  temp_variable = f2(element)
  # more code
Run Code Online (Sandbox Code Playgroud)

在第二个for循环中,我temp_variable在分配之前意外使用了变量.通常情况下,我会得到NameError异常,但不幸的是,它从前一个循环中幸存,有效并初始化.

是否有任何编码实践,IDE工具等有助于防止此类错误?

顺便说一下,我觉得如果循环内的变量不能在循环结束后存活可能会更好.

编辑

@Ignacio Vazquez-Abrams:

如果我理解正确,建议不要在多个循环中使用相同的变量名作为局部变量.我有两个问题:

  1. 通常,在多个循环中使用的最具描述性的变量名称恰好相同.说,我用过类似的东西unique_visitor_count.我不想禁止这个变量在代码中进一步使用,在另一个循环中.

  2. 在处理现有代码时,检查我之前是否已经使用过任何新的变量名称是非常繁重的.

aar*_*ing 7

如果在代码中"更晚",那么您应该将代码分解为多个函数.听起来这个功能太长了.

另一个提示是使用有意义的名称.temp_variable,tmp,temp等都是不好的名字.使用描述其指向的值的名称.这将消除此类问题的大量潜在事件.

此外,列表推导不会泄漏他们的变量,所以如果你可以使用它们,那么这只是他们通常更好的另一个原因.但它们不适用于所有情况.