Python列表extend()传入多个参数触发TypeError如何解决
问题背景
需求为采集多轮用户输入存入列表,后续基于列表内容生成表格,要求保留代码中所有原有变量名。原代码运行到extend()调用语句时触发TypeError报错,无法完成列表存储操作。
原问题代码:
list1=[] model = input("Enter vehicle model: ") passengers = input("How many passengers : ") while True: acstats = input("AC or NON AC- 1.AC 2.Non AC :") if (acstats =="1"): acstats="AC" break elif(acstats == "2"): acstats="Non AC" break else: print("Enter a valid choice") size = input("enter size : ") load = input("enter load : ") list1.extend(model,passengers,acstats,size,load) print(list1)
运行报错日志:
Enter vehicle model: Car How many passengers : 6 AC or NON AC- 1.AC 2.Non AC : 1 enter size : 15 enter load : 46 Traceback (most recent call last): File "main.py", line 18, in <module> list1.extend(model,passengers,size,load) TypeError: extend() takes exactly one argument (4 given) ** Process exited - Return Code: 1 ** Press Enter to exit terminal
错误原因
Python列表的extend()方法仅支持传入1个可迭代对象(列表、元组、字符串等)作为参数,作用是将可迭代对象内的所有元素按顺序追加到原列表中。原代码直接向extend()传入了多个独立的字符串变量,不符合方法的参数定义,因此触发参数数量不匹配的类型错误。
修正方案
将所有需要存入list1的变量打包为一个列表,作为唯一参数传入extend()即可,所有原有变量名完全保留,不影响后续表格生成的逻辑。
修正后可正常运行的完整代码:
list1=[] model = input("Enter vehicle model: ") passengers = input("How many passengers : ") while True: acstats = input("AC or NON AC- 1.AC 2.Non AC :") if (acstats =="1"): acstats="AC" break elif(acstats == "2"): acstats="Non AC" break else: print("Enter a valid choice") size = input("enter size : ") load = input("enter load : ") # 修正:将待存入的变量打包为列表传入extend list1.extend([model,passengers,acstats,size,load]) print(list1)
运行效果
使用报错日志中的输入内容测试,代码无报错,输出结果如下:
['Car', '6', 'AC', '15', '46']
所有采集到的用户输入已按输入顺序存入list1,满足需求。
补充:如果习惯逐个添加元素,也可以连续调用
append()方法实现相同效果,例:list1.append(model) list1.append(passengers) list1.append(acstats) list1.append(size) list1.append(load)两种写法最终得到的
list1内容完全一致。
内容的提问来源于stack exchange,提问作者Nave3n
相关产品推荐
相关产品推荐

