获取 ValueError:没有足够的值来解压(预期 2,得到 1)

问题描述 投票:0回答:1

我收到此错误:

回溯(最近一次调用最后一次): 文件“C:\Users\mukab\PycharmProjects\miniproject5\main.py”,第 43 行,位于 查看()

文件“C:\Users\mukab\PycharmProjects\miniproject5\main.py”,第 25 行,在视图中 用户,密码 = data.split("|",1)

ValueError:没有足够的值来解压(预期为 2,实际为 1)。

当我运行我的代码时。我不知道哪里出了问题。

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("|",1)
            print("User:",user, " |Password:", fer.decrypt(passw.encode()).decode())

def create():
    name = input("Account Name: \n")
    password = input("Enter password \n")

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


while True:
    mode = input("Would you like to view existing password or create a new password? press Q for quit\n").lower()
    if mode == "q":
        break

    if mode == "view":
        view()
    elif mode == "create":
        create()
    else:
        print("Invalid mode")
        continue
python python-3.x cryptography valueerror
1个回答
1
投票

问题显然是这一行:

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

该错误意味着调用

split
时,已返回一个值,您尝试将其分配给两个值:
user, passw

检查这个简化的示例进行比较:

>>> "banana".split("|")
['banana']                      # returned one value
>>> "banana|".split("|")
['banana', '']                  # returned two values

处理该问题的一种方法是将输出分配给一个值,然后检查 split 方法实际返回的内容:

            credentials = data.split("|", 1)
            if len(credentials) == 2:
                 user, passw = credentials
            else:
                print("this is not what I expected")

© www.soinside.com 2019 - 2024. All rights reserved.