我知道还有很多其他讨论可以回答同样的问题,但是我无法弄清楚为什么会出现此错误。我的代码正在尝试向.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
答案 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]