Python 如何在将文本文件转换为字典时避免ValueError
这是我的“studList.txt” 这是我的密码。为什么要显示结果Python 如何在将文本文件转换为字典时避免ValueError,python,file,dictionary,Python,File,Dictionary,这是我的“studList.txt” 这是我的密码。为什么要显示结果 ABC|JOINED DEF|ABSENT GHI|ABSENT JKL|JOINED MNO|JOINED PQR|ABSENT STU|JOINED VWX|JOINED YZA|JOINED ABC|JOINED DEF|ABSENT GHI|JOINED JKL|JOINED MNO|JOINED PQR|ABSENT STU|ABSENT VWX|ABSENT YZA|JOINED ABC|JOINED DEF|JO
ABC|JOINED
DEF|ABSENT
GHI|ABSENT
JKL|JOINED
MNO|JOINED
PQR|ABSENT
STU|JOINED
VWX|JOINED
YZA|JOINED
ABC|JOINED
DEF|ABSENT
GHI|JOINED
JKL|JOINED
MNO|JOINED
PQR|ABSENT
STU|ABSENT
VWX|ABSENT
YZA|JOINED
ABC|JOINED
DEF|JOINED
GHI|JOINED
JKL|JOINED
MNO|JOINED
PQR|ABSENT
STU|JOINED
VWX|ABSENT
YZA|JOINED
ValueError:没有足够的值来解包(预期值为2,实际值为1)
正如评论所暗示的,您的数据可能在某个地方存在问题,而当前问题中的代码确实有效。显然,理想的解决方案是通过修复生成数据的流程来消除此问题,但是,例如,如果数据是手动生成的,则更好的方法是验证数据,而不仅仅是假设数据是正确的。例如:
d={}
with open("studList.txt") as f:
for line in f:
(name,status)=line.strip().split("|")
d[name]=status
print(d)
d = {}
with open(r"../../Downloads/studList.txt") as f:
for line in f:
data = line.strip().split("|")
if len(data) == 2:
d[data[0]] = data[1]
print(d)
通过迎合可能不正确的数据,您可以防止获得该值错误
或者,如果发现错误数据确实是一种例外情况,并且您希望将其忽略并记录,则另一种方法是将有问题的代码包装为try
/,但
块除外,例如:
d={}
with open("studList.txt") as f:
for line in f:
(name,status)=line.strip().split("|")
d[name]=status
print(d)
d = {}
with open(r"../../Downloads/studList.txt") as f:
for line in f:
data = line.strip().split("|")
if len(data) == 2:
d[data[0]] = data[1]
print(d)
两者都将跳过任何错误记录
如注释中所述,您正在为同一个键分配多个值,因此只有最后一个键将继续存在。希望这是正确的行为,或者只是这个虚拟数据的情况。如果您的类可能有两个同名的人,则需要不同的标识符。最后要注意的是,
(名称、状态)
中的括号是多余的。您是否打印了行
以查看问题行是什么?我猜这是一个空行addif not line.strip():在拆分之前继续。有一行不包含|
,因此split
不会返回两部分。检查文件中是否有空行。似乎有多行文本具有相同的键值,因此将替换dict中现有的键值对。也许没关系,只是检查一下。