每当电子邮件输入错误时,Python文件处理错误

每当电子邮件输入错误时,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

无论何时输入的密码是错误的,它都会显示“错误的尝试次数”之类的信息。然而,当我的电子邮件是错误的,它会给我一个错误的消息,而不是一个错误的密码做相同的事情。我尝试为电子邮件构建另一个if循环,但没有成功

错误是:

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时,它将失败,因为它在列表中找不到该值。