尝试使用Python解释器,我无意中将字符串分配给str
,如下所示:
str = 'whatever'
稍后在同一个会话中,我打了另一个声明,打电话给str()
,说......
double_whatever = str(2) + ' * whatever'
...,并收到错误TypeError: 'str' object is not callable
(而不是预期的输出'2 * whatever'
)。 related SO answer让我很快看到了我犯的错误。
但是,我仍然不清楚如何在受影响的会话中修复对str()
的调用。当然我可以退出Python解释器并开始另一个会话,但我很好奇如何避免这种情况。
到目前为止,我已确认......
double_whatever = __builtins__.str(2) + ' * whatever' # => '2 * whatever'
......仍然像我想要的那样工作;但我不清楚如何回到不需要__builtins__.
资格。
如何修复str
的无意重新定义,以便我在Python解释器会话中对str()
的调用再次起作用?
答案 0 :(得分:9)
只需删除覆盖的str
:
del str
阅读http://www.diveintopython.net/html_processing/locals_and_globals.html,了解Python如何为您找到变量。
基本思想是首先搜索定义变量的命名空间,因此如果定义名为str
的变量,则会覆盖built-in
一个变量。