Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 错误列表索引必须是整数,只要我不使用输入获取参数,它就可以工作_Python_Python 3.x_List - Fatal编程技术网

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