我收到此错误:
回溯(最近一次调用最后一次): 文件“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
问题显然是这一行:
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")