You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复密码存储程序view函数抛出的ValueError问题

问题:密码管理器view函数抛出ValueError

我跟着教程写了一个带添加、查看、存储密码功能的程序,但每次运行view函数都会抛出ValueError。具体代码和报错信息如下:

代码

from cryptography.fernet import Fernet

'''
def write_key():
    key = Fernet.generate_key()
    with open("key.key", "wb") as key_file:
        key_file.write(key)
'''

def load_key():
    file = open("key.key", "rb")
    key = file.read()
    file.close()
    return key

key = load_key()
fer = Fernet(key)

def view():
    with open('passwords.txt', 'r') as f:
        for line in f.readlines():
            data = line.rstrip()
            user, passw = data.split("|")
            print("User:", user, "| Password:",fer.decrypt(passw.encode()).decode())
def add():
    name = input('Account Name: ')
    pwd = input("Password: ")

    with open('passwords.txt', 'a') as f:
        f.write(name + "|" + fer.encrypt(pwd.encode()).decode() + "\n")

while True:
    mode = input("Would you like to add a new password or view existing ones (view, add), press q to quit? ").lower()
    if mode == "q":
        break
    if mode == "view":
        view()
    elif mode == "add":
        add()
    else:
        print("Invalid mode.")
        continue

报错输出

Would you like to add a new password or view existing ones (view, add), press q to quit? view
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-18-234bb8d48400> in <module>
         35         break
         36     if mode == "view":
    ---> 37         view()
         38     elif mode == "add":
         39         add()
    
    <ipython-input-18-234bb8d48400> in view()
         21         for line in f.readlines():
         22             data = line.rstrip()
    ---> 23             user, passw = data.split("|")
         24             print("User:", user, "| Password:",fer.decrypt(passw.encode()).decode())
         25 def add():

ValueError: too many values to unpack (expected 2)

解决方案

这个错误的核心是passwords.txt里的某一行用|分割后,得到的元素数量不是2,没法赋值给user, passw两个变量。以下是具体解决办法:

1. 检查并修复密码文件内容

打开passwords.txt,逐行排查:

  • 是否有包含多个|的行(比如账户名里误输入了|)
  • 是否有空行或者没有|的无效行
  • 是否存在之前手动写入的不符合用户名|加密密码格式的内容

把这些异常行删除或修正成正确格式即可。

2. 限制split的分割次数

修改view函数里的split语句,添加maxsplit=1参数,确保只以第一个|为分隔符,就算账户名里包含|也不会出错:

user, passw = data.split("|", 1)

3. 添加异常处理避免崩溃

给view函数加上异常捕获,遇到格式错误的行时跳过并提示,防止程序直接崩溃:

def view():
    with open('passwords.txt', 'r') as f:
        for line in f.readlines():
            data = line.rstrip()
            try:
                user, passw = data.split("|", 1)
                print("User:", user, "| Password:", fer.decrypt(passw.encode()).decode())
            except ValueError:
                print(f"跳过格式错误的行: {data}")

内容的提问来源于stack exchange,提问作者Axel Palomino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 04:01:18