“'int'对象没有'_getitem_'属性”对我的代码意味着什么?
我刚开始学习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 个回答
问题出在 input_a[0]
这部分,这个操作是想获取 input_a
的第一个元素。方括号其实是 __getitem__
方法的简写。不过,input
返回的是一个普通的 int
(整数),而整数是没有 __getitem__
方法的。
这个错误的意思是,你不能对一个整数使用 [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)
但是如果 input_a
不能转换成数字,这会引发一个 ValueError
异常,像这样:
>>> 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(
。
至于其他部分,因为这看起来像是作业,我就留给你自己去完成了。
input_a[0]
和 input_a.__getitem__(0)
是一样的意思,这里你的 input_a
是一个 int
(整数),而整数没有这个方法。
我觉得你是在用 Python 2.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