0
def login():
userinfo = open("userinfo.txt","r")
userinforec = userinfo.readline()
username1 = input("What is your username?\n")
while userinforec != "":
field = userinforec.split(",")
username = field[0]
password = field[1]
name = field[2]
age = field[3]
year = field[4]
mathseasy = field[5]
mathsmed = field[6]
mathshard = field[7]
hiseasy = field[8]
hismed = field[9]
hishard = field[10]
if username != username1:
print("Error, username not found")
break
else:
password1 = str(input("What is your password?\n"))
if password == password1:
print("password accepted")
writereport(username)
else:
print("Error, password not accepted")
login()
userinforec = userinfo.readline()
userinfo.close()
return username
タイトルで述べたように、私は、コードのこの部分を実行すると
まさに、それが最終ラインで(ユーザ名を返す)と述べています割り当て前に参照されます。UnboundLocalError:ローカル変数(関数の戻り部分に)割り当て前に参照した「ユーザ名」
UnboundLocalError: local variable 'username' referenced before assignment
私は他のスレッドを見て、変数がしかし、ここでそれはない関数の外にある場合、それすべてが発生しました。まだglobal
を使用する必要がありますか、これを回避する別の方法がありますか?
'while userinforec!=" "::'ループが入力されない場合、 'username'は決して開始されません。 'while'ループの外でいくつかのデフォルト値に設定します –
whileループの外側で変数 'username'を設定することを意味する場合は、すでに@RNarを持っています。 EDIT: あなたの名前はループ外です –
@SkidSolo 、いいえ、あなたはしません。 'userinfo'、' userinforec'と 'username1'を初期化します。 'username'が任意の値に初期化される最初の行は、whileループの中にあります(つまり、' username = field [0] ') –