【问题标题】:Python, user input as a function argument not working: TypeError: 'str' object is not callablePython,作为函数参数的用户输入不起作用:TypeError:'str'对象不可调用
【发布时间】:2020-07-30 16:33:27
【问题描述】:

我昨天刚开始学习 Python,所以这可能是一个愚蠢的问题。尽管如此,我一直在寻找解决方案,但找不到! 这是我非常基本的程序:

def year(year):
  try:
    print(int(year))
  except:
    print("you did not enter a year")


if __name__ == "__main__":
  year = input("what year? ")
  year(year)

问题是,当我在终端中运行它时,我会收到以下消息:

Traceback (most recent call last):
  File "fonctions.py", line 24, in <module>
    year(year)
TypeError: 'str' object is not callable

有人可以帮我解决这个问题吗? 谢谢! 奥利维尔

【问题讨论】:

  • 您通过将year 设置为从input 返回的字符串来覆盖您自己的函数
  • 这能回答你的问题吗? TypeError: 'str' object is not callable (Python)
  • 第二个问题更适合新的单独问题。根据错误消息,问题可能看起来很相似,但它们是两个截然不同的问题。第一个问题是命名空间问题,而第二个问题是变量类型问题。
  • @OlivierGirardot 我已经回滚了您的编辑。以后请不要将您的问题编辑成完全不同的内容,尤其是在有人回答之后。

标签: python function typeerror callable


【解决方案1】:

更改输入变量名称,因为这里 python 解释它正在调用 year 变量,而不是函数:

if __name__ == "__main__":
  year_val = input("what year? ")
  year(year_val)

【讨论】:

  • 虽然这将解决问题,但我认为更 Pythonic 的解决方案是将函数重命名为 is_year 之类的东西。它使代码更具可读性,并且将来更易于调试。
  • 是的,这确实解决了我的问题。这绝对是一个菜鸟的错误 :) 谢谢!
  • 但老实说,我在另一个函数上也遇到了同样的问题,而且函数名称和参数名称之间没有任何混淆。我会把它添加到这个问题中。
猜你喜欢
  • 1970-01-01
  • 2020-09-11
  • 2013-05-05
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
相关资源
最近更新 更多