如何在将文本文件转换为字典时避免ValueError

2024-05-04 00:28:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这是我的“studList.txt”

这是我的密码。为什么要显示结果

d={}
with open("studList.txt") as f:
    for line in f:
        (name,status)=line.strip().split("|")
        d[name]=status
print(d)

ValueError: not enough values to unpack (expected 2, got 1)


Tags: nametxtdeflinejklabcabsentstu
1条回答
网友
1楼 · 发布于 2024-05-04 00:28:09

正如评论所暗示的,您的数据可能在某个地方存在问题,而当前问题中的代码确实有效。显然,理想的解决方案是通过修复生成数据的流程来消除此问题,但是,例如,如果数据是手动生成的,则更好的方法是验证数据,而不仅仅是假设数据是正确的。例如:

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/except块,例如:

d = {}
with open("../../Downloads/studList.txt") as f:
    for line in f:
        try:
            name, status = line.strip().split("|")
            d[name] = status
        except ValueError as ee:
            print(f"Invalid data detected: {ee}")
print(d)

两者都将跳过任何错误记录

如注释中所述,您正在为同一个键分配多个值,因此只有最后一个键将继续存在。希望这是正确的行为,或者只是这个虚拟数据的情况。如果您的类可能有两个同名的人,则需要不同的标识符。最后要注意的是(name, status)中的括号是多余的

相关问题 更多 >