string, integer = input("Enter a word and an integer: ")
Python3返回那个ValueError:太多的值无法解包(预期2)。我该怎么解决?
答案 0 :(得分:2)
input()
方法将返回一个单个字符串值,除非您使用split()
将其拆分为多个部分(默认情况下,将拆分 处的空格)。< / p>
>>> string, integer = input("Enter a word and an integer: ")
Enter a word and an integer: test 5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
>>> string, integer = input("Enter a word and an integer: ").split()
Enter a word and an integer: test 5
>>> string
'test'
>>> integer
'5'
答案 1 :(得分:0)
您可以将任何可迭代的内容解压缩为变量。
字符串是一个变量,例如,您可以这样做:
a,b = 'yo'
给出a = 'y'
和b = 'o'
。
如果要解压缩两个“单词”,则必须将字符串拆分为空格以获取两个单词的列表。
即
'hello user'.split()
给['hello', 'user']
。
然后您可以将此列表解压缩为两个变量。
这就是您想要的,但是要拆分从input()
返回的字符串。
即
string, integer = input("Enter a word and an integer: ").split()
这就是您要寻找的东西。
哦,如果您希望integer
变量实际上是一个整数,则应在之后将其转换为1:
integer = int(integer)
答案 2 :(得分:0)
有几种方法可以做到这一点,我认为听起来很正确,就是将给定的类型强加给用户:
def typed_inputs(text, *types):
user_input = input(text).split()
return tuple(t(v) for t, v in zip(*types, user_input))
可用于以下用途:
>>> types = (int, float, str)
>>> message = f"Input the following types {types} :"
>>> print(typed_inputs(message, types))
Input the following types (<class 'int'>, <class 'float'>, <class 'str'>) : 1 2.1 test
(1, 2.3, 'test')
答案 3 :(得分:0)
下面的方法可以工作,但是两者都是字符串。
string, integer = input("Enter a word and an integer: ").split()
您需要这样的东西。
string_val, integer_val = raw_input("String"), int(raw_input("Integer"))
如果用户不输入int,它将失败。 您可能想要用户尝试捕获并通知用户。