0

我开始玩一些python,作为一个新手,我尝试了这个:

>>> s="";str=""
>>> for x in [ 1,2,3,4,5,6 ] : 
...   s += str(x)
...   
Traceback (most recent call last):
  File "<console>", line 3, in <module>
TypeError: 'str' object is not callable

我不小心声明了一个名为str(str 应该是一个函数)的变量。

  • 假设它会过多地破坏语义,即使在动态类型语言中,是否有一个命名空间我可以用来限定方法,str并确保这种情况不会发生或使其变得困难?
4

2 回答 2

1

根据您的问题,您已经定义

str=""
因此,当您调用将值转换为字符串的 str 方法时,它不会调用实际方法来代替它将调用str="". 这就是您收到错误的原因,因为您无法调用 str 对象将 int 转换为字符串。

于 2013-11-09T21:36:24.423 回答
1

这就是import <module>代替的from <module> import *用途。只要您在局部变量值 in 的唯一含义中使用 str <module>,您就可以使用 module.strelswhere,而无需修改命名空间。

唯一不能冲突的标记是 关键字。这是预期的功能,没有办法阻止:一切都是 Python 中的对象

您可能想要使用一些 IDE 工具,例如 p.ex。Eclipse+PyDev,检查你的代码并警告可能的错误。

于 2013-11-09T21:47:47.827 回答