ValueError:需要超过1个值才能解包(目录)

时间:2018-06-22 21:39:22

标签: python traceback

我知道还有很多其他讨论可以回答同样的问题,但是我无法弄清楚为什么会出现此错误。我的代码正在尝试向.txt文件中添加新名称(键)和电话号码(值)。将新信息插入文本文件的第一部分有效,但是只要到达查找部分,就会显示此错误。 这是代码:

def add(filename, key, value):
    f = open("numbers.txt", 'a')
    f.write(key + ',' + value + '\n')
    print("Please enter your name (first name or full name)")
gig = input()
gig = str(gig)
print("Please enter your phone number(xxx-xxx-xxxx)")
jj = input()
jj = str(jj)
add("numbers.txt", gig, jj)

def find(filename, key):
    f = open('numbers.txt', 'r')
    for row in f:
        key, value = row.split(',', 1)
        if gig == key:
            return value[:-1]
find("numbers.txt", gig)     

这是.txt文件:

John Johnson,123-456-6789
杰克·杰克逊(Jack Jackson),234-567-8989
约翰·格林,999-999-9999

显示的错误代码是: Traceback (most recent call last): File "C:/Python34/#.py", line 18, in <module> find("numbers.txt", gig) File "C:/Python34/#.py", line 15, in find key, value = row.split(',', 1) ValueError: need more than 1 value to unpack

1 个答案:

答案 0 :(得分:0)

这不能与您提供的示例文件一起复制,但是……问题在这里:

key, value = row.split(',', 1)

您正在使用maxsplit值为split的{​​{1}}进行呼叫。这样可以确保最多返回两个字符串。但是,如果1中没有逗号,您仍然只能返回一个字符串。

发生这种情况的一种方法是,如果文件中包含空白行:

row

很明显为什么我会得到这个例外,对吗?这就是代码中正在发生的事情。

您当前的代码不会创建任何空行,但是也许您不小心在文本编辑器中添加了空行,或者您的代码的旧版本写了额外的>>> row = '\n' >>> row.split(',', 1) ['\n'] >>> key, value = row.split(',',1) ValueError: not enough values to unpack (expected 2, got 1) 值或其他内容。


一种解决方法是使用\n

try

请注意,我实际上正在打印出失败的行。这总是比试图猜测可能出了什么问题要好。


或者,如果根据您的设计可以选择空白行,则可以跳过它们而不会发出警告:

def find(filename, key):
    f = open('numbers.txt', 'r')
    for row in f:
        try:
            key, value = row.split(',', 1)
        except ValueError as ex:
            print(f'WARNING: exception parsing line {row!r}: {ex!r}')
            continue
        if gig == key:
            return value[:-1]