每当电子邮件输入错误时,Python文件处理错误
无论何时输入的密码是错误的,它都会显示“错误的尝试次数”之类的信息。然而,当我的电子邮件是错误的,它会给我一个错误的消息,而不是一个错误的密码做相同的事情。我尝试为电子邮件构建另一个if循环,但没有成功 错误是:每当电子邮件输入错误时,Python文件处理错误,python,Python,无论何时输入的密码是错误的,它都会显示“错误的尝试次数”之类的信息。然而,当我的电子邮件是错误的,它会给我一个错误的消息,而不是一个错误的密码做相同的事情。我尝试为电子邮件构建另一个if循环,但没有成功 错误是: Traceback (most recent call last): File "E:\Theater.py", line 126, in <module> TheaterFileLogin() File "E:\Theater.py", line 56, in Theat
Traceback (most recent call last):
File "E:\Theater.py", line 126, in <module>
TheaterFileLogin()
File "E:\Theater.py", line 56, in TheaterFileLogin
Emaildex = Emails1.index(Email)
ValueError: 's,dm' is not in list
回溯(最近一次呼叫最后一次):
文件“E:\Theater.py”,第126行,在
TheaterFileLogin()
文件“E:\Theater.py”,第56行,在TheaterFileLogin中
Emaildex=Emails1.index(电子邮件)
ValueError:“s,dm”不在列表中
代码是:
import csv
x=0
while x<3:
with open('Theater.csv', 'r') as csvfile:
Theater = csv.reader(csvfile, delimiter=",")
Emails1 = []
Passwords1 = []
Passwords2 = []
Passwords3 = []
Passwords4 = []
Firstnames = []
Surnames = []
for row in Theater:
Firstname = row [1]
Surname = row [0]
Email1 = row[2]
Password1 = row[7]
Password2 = row[8]
Password3 = row[9]
Password4 = row[10]
Firstnames.append(Firstname)
Surnames.append(Surname)
Emails1.append(Email1)
Passwords1.append(Password1)
Passwords2.append(Password2)
Passwords3.append(Password3)
Passwords4.append(Password4)
Email = input("Email Adress: ")
Password = input("Password: ")
Emaildex = Emails1.index(Email)
thepassword = Passwords1[Emaildex]
adminlevel1password = Passwords2[Emaildex]
adminlevel2password = Passwords3[Emaildex]
adminlevel3password = Passwords4[Emaildex]
FN = Firstnames[Emaildex]
SN = Surnames[Emaildex]
if thepassword == Password:
print("Welcome")
x=5
else:
print("Incorect email or password try again")
x+=1
print("Attempt",x)
导入csv
x=0
当您试图在列表中查找不存在项的索引时,您会得到一个ValueError
。有两种方法可以解决这个问题。你可以把Emails1.index(Email)
放在
,块,但只测试电子邮件是否在电子邮件1
中更简单
下面是一个改进版的代码,它可以做您想要做的事情。请注意,我按照中的建议使用'rb'
模式打开CSV文件,尽管在Python3中这不是严格必需的
import csv
with open('Theater.csv', 'rb') as csvfile:
Theater = csv.reader(csvfile, delimiter=",")
Emails1 = []
Passwords1 = []
Passwords2 = []
Passwords3 = []
Passwords4 = []
Firstnames = []
Surnames = []
for row in Theater:
Firstname = row [1]
Surname = row [0]
Email1 = row[2]
Password1 = row[7]
Password2 = row[8]
Password3 = row[9]
Password4 = row[10]
Firstnames.append(Firstname)
Surnames.append(Surname)
Emails1.append(Email1)
Passwords1.append(Password1)
Passwords2.append(Password2)
Passwords3.append(Password3)
Passwords4.append(Password4)
for attempt in range(1, 4):
Email = input("Email Address: ")
Password = input("Password: ")
if Email in Emails1:
Emaildex = Emails1.index(Email)
thepassword = Passwords1[Emaildex]
if thepassword == Password:
break
print("Incorrect email or password.")
if attempt < 3:
print("Please try again.")
print("Attempt", attempt)
else:
print("Aborting.")
exit()
print("Welcome")
adminlevel1password = Passwords2[Emaildex]
adminlevel2password = Passwords3[Emaildex]
adminlevel3password = Passwords4[Emaildex]
FN = Firstnames[Emaildex]
SN = Surnames[Emaildex]
导入csv
将open('Theater.csv'、'rb')作为csvfile:
剧院=csv.reader(csvfile,分隔符=“,”)
电子邮件1=[]
密码1=[]
密码2=[]
密码3=[]
密码4=[]
名字=[]
姓氏=[]
对于剧院内的row:
Firstname=行[1]
姓氏=第[0]行
Email1=第[2]行
Password1=行[7]
Password2=行[8]
Password3=行[9]
Password4=行[10]
Firstname.append(Firstname)
姓氏。附加(姓氏)
Emails1.append(Email1)
Passwords1.append(Password1)
Passwords2.append(Password2)
Passwords3.append(Password3)
密码4.附加(密码4)
对于在范围(1,4)内的尝试:
电子邮件=输入(“电子邮件地址:”)
密码=输入(“密码:”)
如果电子邮件中包含电子邮件1:
Emaildex=Emails1.index(电子邮件)
密码=密码1[电子邮件索引]
如果密码==密码:
打破
打印(“不正确的电子邮件或密码”)
如果尝试<3:
打印(“请重试”)
打印(“尝试”,尝试)
其他:
打印(“中止”)
退出()
打印(“欢迎”)
adminlevel1password=Passwords2[Emaildex]
adminlevel2password=Passwords3[Emaildex]
adminlevel3password=密码4[Emaildex]
FN=名字[电子邮件索引]
SN=姓氏[Emaildex]
您的代码效率很低。如果密码错误,为什么要丢弃csv文件中的所有数据并重新读取?我想您应该给用户3次机会提供正确的电子邮件地址和相应的密码。如果是这样的话,你应该在你的问题中这样说。简单的回答是,你试图从不存在的列表中获取一个项目的索引。没有检查以确保输入的电子邮件有效,因此当它尝试设置Emaildex时,它将失败,因为它在列表中找不到该值。