“'int'对象没有属性'_getitem_'”对我的代码意味着什么?

时间:2014-08-10 12:42:04

标签: python typeerror

我刚开始使用Python,作为初学者,我正在尝试制作一个计算器(只有四个函数) 所以这是代码:

input_start = input("press 1 to perform addition press 2 to perform subtraction press 3 to perform multiplication press 4 to perform division press 5 to quit")
if input_start == 1:
    input_a = input("put your first number here:")
    print input_a
    if int(input_a[0]) == (1,2,3,4,5,6,7,8,9,0): 
        input_b = input("put your second number here:")
        print input_b
        if int(input_b[0]) == (1,2,3,4,5,6,7,8,9,0):
            print input_a + input_b
        else:
            print "invalid"
    else:
        print "invalid"
print input_start

对于其他功能来说就像这样。当我运行它时,会出现此错误:

    Traceback (most recent call last):
  File "C:\Users\Baik\Desktop\python projects\calculator.py", line 6, in <module>
    if int(input_a[0]) == (1,2,3,4,5,6,7,8,9,0):
TypeError: 'int' object has no attribute '__getitem__'

错误意味着什么,我该如何解决?我知道这听起来好像我要求你们修改我的代码,但我不知道这个错误意味着什么。

3 个答案:

答案 0 :(得分:1)

input_a[0]等于input_a.__getitem__(0),此处input_aint,并且它没有这样的方法。 我认为你使用的是python2.x,input函数会自动解析输入,如果它是一个数字。

input_start = input("press 1 to perform addition press 2 to perform subtraction press 3 to perform multiplication press 4 to perform division press 5 to quit")
if input_start == 1:
    input_a = input("put your first number here:")
    print input_a
    if isinstance(input_a, int): 
        input_b = input("put your second number here:")
        print input_b
        if isinstance(input_b, int):
            print input_a + input_b
        else:
            print "invalid"
    else:
        print "invalid"
print input_start

答案 1 :(得分:0)

问题是input_a[0] - 这会尝试获取input_a的第一个索引。方括号对于__getitem__方法来说确实很短。但是,input会返回纯int,但没有__getitem__方法。

答案 2 :(得分:0)

此错误表示您无法对整数执行[0]

>>> 5[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object has no attribute '__getitem__'

由于您使用的是input,因此任何有效类型的代码都将自动转换。这意味着如果用户在提示“将您的第一个号码放在此处:”时键入5,则python会将其作为 5,而不是字符串 '5'

你还有很多其他问题,主要是这一行:

if int(input_a[0]) == (1,2,3,4,5,6,7,8,9,0)

这不符合您的想法。我怀疑你想说“如果input_a是1或2或3或4或5或6或7或8或9或0,但它实际做的是”如果索引处项目的整数值名称input_a指向的0与元组(1,2,3,4,5,6,7,8,9,0)

相同

如果您想说如果输入介于0到9 之间,那么您可以这样做:

if 0 < input_a < 9:
   # do something

如果您想检查输入是否为数字,可以尝试转换它:

input_a = int(input_a)

但如果ValueError无法转换为数字,则会引发input_a异常,如下所示:

>>> input_a = 'hello'
>>> int(input_a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'hello'

检查输入是否为数字的另一种方法是使用字符串isdigit()方法:

>>> input_a = '5'
>>> input_a.isdigit()
True

请注意,如果值已经是数字,则无效,因为数字没有isdigit()方法:

>>> input_a = 5
>>> input_a.isdigit()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'isdigit'

因此,为了让您的生活轻松,您需要先将输入转换为字符串。为此,请将input(替换为raw_input(

其余的,因为这看起来像家庭作业,我留给你。