Python 错误列表索引必须是整数,只要我不使用输入获取参数,它就可以工作
我试过:Python 错误列表索引必须是整数,只要我不使用输入获取参数,它就可以工作,python,python-3.x,list,Python,Python 3.x,List,我试过: def funct(arg, list): Diferent_list=[] for i in arg: Diferent_list=Diferent_list+([list[1:][i][0:6]]) 为什么会这样 funct((1,2,3),list) 但如果我说: arg= input((1,2,3)) funct(arg,list) (inside input()我把我放的东西放在提示符下测试 它给 TypeError: list indices must
def funct(arg, list):
Diferent_list=[]
for i in arg:
Diferent_list=Diferent_list+([list[1:][i][0:6]])
为什么会这样
funct((1,2,3),list)
但如果我说:
arg= input((1,2,3))
funct(arg,list)
(inside input()我把我放的东西放在提示符下测试
它给
TypeError: list indices must be integers or slices, not str
这就是为什么我需要它是(1,2,3)或任何“元组”
正如Mark Meyer的评论中所指出的,input()在Python 3.x中总是返回一个
str
。因此,将代码修改为类似以下内容以获得整数:
arg = int(arg)
但请注意,如果他们键入的不是数字,则此操作可能会失败。因此,如果您希望更健壮一点,则应在try:块中执行转换,并查找表示转换不起作用的ValueError
异常。最后,您可以将其包装在while
循环中,让他们继续尝试,直到ey最终输入了一个实际的数字!(while循环对于您的应用程序来说可能是过度杀伤力,在这种情况下,只要打印一条错误消息,并在出现异常时执行sys.exit()
)
例如:eval(input(“Put list you want group here(它必须是[a,b,c])))返回一个字符串。如果你想要一个数字,你需要转换它。是的,我知道了,但是我把输入转换成了我所知道的一切似乎都无关紧要的intenger float list…有没有办法让它“原始”(没有input tho)我的意思是用户输入的文字在Python 3.x input()中总是只返回用户键入的内容,并在末尾删除换行符。在Python 2.x input()中,实际将用户输入字符串解析为Python表达式,因此如果用户键入2+2,它将返回4作为
int
,如果用户键入(10,20),if将以元组的形式返回(10,20),等等。这可能非常危险,因为用户可以键入任意Python表达式。也就是说,在Python3.x中使用arg=eval(input())可以获得相同的行为但是我建议不要这样做!变量和函数名应该遵循带有下划线的小写形式。我明白了,但问题是我认为我的输入是正确的(1,2,4),它也可以是(1,4,5)或者只有1,但在这种情况下,用户没有必要这样做,因为主要问题是我将编辑PostHa,我明白了,您可以使用元组或整数作为输入,很抱歉我错过了。在这种情况下,您可以尝试先将您的输入转换为元组
,如果失败,请尝试将其转换为int
,然后使用哪一个成功作为您的arg
value找到我需要的
arg = int(arg)
import sys
while True:
arg= input('(1,2,3, or q to quit) ')
if arg == 'q': # users just wants out, so sys.exit()
sys.exit(0)
try:
arg = int(arg)
except ValueError: # int(arg) failed to convert
print("bad number please try again")
else:
break # NO exception occurred so number is good
# so break out of loop and move on
eval() is the awnser