【问题标题】:Can anyone help me with this TypeError I keep getting in Python 2.7?任何人都可以帮助我解决我在 Python 2.7 中不断遇到的 TypeError 问题吗?
【发布时间】:2013-12-16 16:36:03
【问题描述】:

我正在尝试制作一个程序,该程序使用存储在字典中的值将用户输入的 5 个字母字符串转换为浮点数以转换每个字母。这是我的代码:

    kvalues = {"a":1.01, "b":1.02, "c":1.03, "d":1.04, "e":1.05, "f":1.06, "g":1.07, "h":1.08, "i":1.09, "j":1.10, "k":1.11, "l":1.12, "m":1.13, "n":1.14, "o":1.15, "p":1.16, "q":1.17, "r":1.18, "s":1.19, "t":1.20, "u":1.21, "v":1.22, "w":1.23, "x":1.24, "y":1.25, "z":1.26}
    def convert_key(key):
        #converts the key into a float using the values stored in kvalues
        k1 = float(kvalues.get(key[0]))
        k2 = float(kvalues.get(key[1]))
        k3 = float(kvalues.get(key[2]))
        k4 = float(kvalues.get(key[3]))
        k5 = float(kvalues.get(key[4]))
        print k1 + k2 + k3 + k4 + k5
    convert_key(raw_input (Please enter a key:))

当我运行我的程序时,我收到此错误:“TypeError: 'builtin_function_or_method' 对象没有属性 'getitem'”。真正令人困惑的部分是当我像这样通过空闲 shell 运行代码时:

    key = "koala"
    kvalues = {"a":1.01, "b":1.02, "c":1.03, "d":1.04, "e":1.05, "f":1.06, "g":1.07, "h":1.08, "i":1.09, "j":1.10, "k":1.11, "l":1.12, "m":1.13, "n":1.14, "o":1.15, "p":1.16, "q":1.17, "r":1.18, "s":1.19, "t":1.20, "u":1.21, "v":1.22, "w":1.23, "x":1.24, "y":1.25, "z":1.26}
    k1 = float(kvalues.get(key[0]))
    print k1

完美运行!有谁知道这里的问题是什么?我是 Python 新手,不太熟悉该语言的细微差别。

这是完整的回溯:

Traceback (most recent call last): 
File "K:\Projects\koala.py", line 73, in <module> menu() 
File "K:\Projects\koala.py", line 10, in menu encrypt() 
File "K:\Projects\koala.py", line 28, in encrypt e_key = convert_key(e_key) 
File "K:\Projects\koala.py", line 67, in convert_key k1 = float(kvalues.get(key[0]))
TypeError: 'builtin_function_or_method' object has no attribute 'getitem' 

当 print 添加到函数的开头时:

    <built-in method lower of str object at 0x0000000002AC7E40>

【问题讨论】:

  • 显示你的实际代码,而不是你认为的代码应该是什么样子。
  • 那是直接从我的代码中复制过来的。
  • 代码中还有其他部分没有显示吗?当它为您提供TypeError 时,它还会为您提供一个行号,并显示有问题的代码行,箭头指向有问题的地方。您能否利用这些信息帮助缩小实际问题的范围?
  • 很明显,这是来自一个更大项目的 sn-p,在某处您正在命名其他函数或对象 kvalues 并遮蔽(覆盖)字典 kvalues
  • @user3052634 这就是为什么我把你指向sscce.org

标签: python python-2.7 dictionary typeerror


【解决方案1】:

问题是你在某处这样做:

e_key = mystring.lower

当你打算这样做时:

e_key = mystring.lower()

.lower 是一个方法,意味着它需要像函数一样被调用,所以你需要括号。在第一种方法中,您只需将方法重新分配给 e_key 变量。

【讨论】:

  • 天哪。哇。向您致敬,先生。
  • 我建议您在调试时使用print 填充您的代码,因为您希望变量包含的内容可能并非总是如此(正如您在此处发现的那样)。
  • +1 on print: print(type(obj), repr(obj)),或类似的东西,应该始终是第一步。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2018-06-03
  • 2019-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多