Allthough xxx is as global defined, expected NameError: name 'xxx' is not defined

Allthough xxx is as global defined, expected NameError: name 'xxx' is not defined

i become this error:

File "xx.py", line 60, in module

Kontrolle.Check()

文件 "xx.py",第 55 行,检查

if isSigned == True:

NameError: 名称 'isSigned' 未定义

import hashlib  
global security 
class Sicherheit:
    global isSigned
    global passwordFile
    def Signup(self):
        passwordFile = 'usercreds.tmp'  
        security = False
        isSigned = False #!
        print("Sie müssen sich erst anmelden!\n")

        usernameInput = input("Bitte geben Sie Ihren Nutzername ein... \n") 
        passwordInput = input("Bitte geben Sie Ihr Passwort ein... \n")

        usernameInputHashed = hashlib.sha512(usernameInput.encode()) 
        passwordInputHashed = hashlib.sha512(passwordInput.encode())

        with open(passwordFile, 'w') as f:
            f.write(str(usernameInputHashed.hexdigest()))
            f.write('\n')
            f.write(str(passwordInputHashed.hexdigest()))
            f.close()  
        self.Login()  # Moves onto the login def
        isSigned = True

    def Login(self):
        security = False
        print("Sie müssen sich einloggen!\n")

        usernameEntry = input("Bitte geben Sie Ihren Nutzername ein... \n")  
        passwordEntry = input("Bitte geben Sie Ihr Passwort ein... \n")

        usernameEntry = hashlib.sha512(usernameEntry.encode())  
        passwordEntry = hashlib.sha512(passwordEntry.encode())

        usernameEntryHashed = usernameEntry.hexdigest() 
        passwordEntryHashed = passwordEntry.hexdigest()

        with open(passwordFile) as r:
            info = r.readlines()
            usernameInFile = info[0].rstrip()
            passwordInFile = info[1].rstrip() 

        if usernameEntryHashed == usernameInFile and passwordEntryHashed == passwordInFile:  
            print("Anmeldung war erfolgreich!\n")
            security = True

        else:
            print("Anmeldung war nicht erfolgreich!!!\n")
            security = False

    def Check(self):
        if isSigned == True:
            self.Login()
        else:
            self.Signup()
Kontrolle = Sicherheit()
Kontrolle.Check()
while security :

I had defined it (as global), it still gives this error.

I'm waiting for your helps

Many thanks in advance

请参阅 python 有关全局的文档 https://docs.python.org/release/2.4/ref/global.html

它说,"The global statement is a declaration which holds for the entire current code block." 所以你必须在你要访问它的代码块中使变量成为全局变量。试试下面的代码:

import hashlib
security = False
isSigned = False
passwordFile = 'usercreds.tmp'
class Sicherheit:

    def Signup(self):
        global isSigned
        print("sign up Sie müssen sich erst anmelden!\n")
        usernameInput = input("Bitte geben Sie Ihren Nutzername ein... \n") 
        passwordInput = input("Bitte geben Sie Ihr Passwort ein... \n")

        usernameInputHashed = hashlib.sha512(usernameInput.encode()) 
        passwordInputHashed = hashlib.sha512(passwordInput.encode())

        with open(passwordFile, 'w') as f:
            f.write(str(usernameInputHashed.hexdigest()))
            f.write('\n')
            f.write(str(passwordInputHashed.hexdigest()))
            f.close()  
        self.Login()  # Moves onto the login def
        isSigned = True

    def Login(self):
        global security
        security = False
        print("Sie müssen sich einloggen!\n")

        usernameEntry = input("Bitte geben Sie Ihren Nutzername ein... \n")  
        passwordEntry = input("Bitte geben Sie Ihr Passwort ein... \n")

        usernameEntry = hashlib.sha512(usernameEntry.encode())  
        passwordEntry = hashlib.sha512(passwordEntry.encode())

        usernameEntryHashed = usernameEntry.hexdigest() 
        passwordEntryHashed = passwordEntry.hexdigest()

        with open(passwordFile) as r:
            info = r.readlines()
            usernameInFile = info[0].rstrip()
            passwordInFile = info[1].rstrip() 

        if usernameEntryHashed == usernameInFile and passwordEntryHashed == passwordInFile:  
            print("Anmeldung war erfolgreich!\n")
            security = True

        else:
            print("Anmeldung war nicht erfolgreich!!!\n")
            security = False

    def Check(self):
        global isSigned
        if isSigned == True:
            self.Login()
        else:
            self.Signup()
Kontrolle = Sicherheit()
Kontrolle.Check()

实际上你根本不需要全局变量。将这些变量声明为 class 的成员变量并使用 self 访问。试试下面的代码:

import hashlib  
class Sicherheit:
    security = False
    isSigned = False
    passwordFile = 'usercreds.tmp'
    def Signup(self):
        print("Sie müssen sich erst anmelden!\n")
        usernameInput = input("Bitte geben Sie Ihren Nutzername ein... \n") 
        passwordInput = input("Bitte geben Sie Ihr Passwort ein... \n")

        usernameInputHashed = hashlib.sha512(usernameInput.encode()) 
        passwordInputHashed = hashlib.sha512(passwordInput.encode())

        with open(self.passwordFile, 'w') as f:
            f.write(str(usernameInputHashed.hexdigest()))
            f.write('\n')
            f.write(str(passwordInputHashed.hexdigest()))
            f.close()  
        self.Login()  # Moves onto the login def
        self.isSigned = True

    def Login(self):
        self.security = False
        print("Sie müssen sich einloggen!\n")

        usernameEntry = input("Bitte geben Sie Ihren Nutzername ein... \n")  
        passwordEntry = input("Bitte geben Sie Ihr Passwort ein... \n")

        usernameEntry = hashlib.sha512(usernameEntry.encode())  
        passwordEntry = hashlib.sha512(passwordEntry.encode())

        usernameEntryHashed = usernameEntry.hexdigest() 
        passwordEntryHashed = passwordEntry.hexdigest()

        with open(self.passwordFile) as r:
            info = r.readlines()
            usernameInFile = info[0].rstrip()
            passwordInFile = info[1].rstrip() 

        if usernameEntryHashed == usernameInFile and passwordEntryHashed == passwordInFile:  
            print("Anmeldung war erfolgreich!\n")
            self.security = True

        else:
            print("Anmeldung war nicht erfolgreich!!!\n")
            self.security = False

    def Check(self):
        if self.isSigned == True:
            self.Login()
        else:
            self.Signup()
Kontrolle = Sicherheit()
Kontrolle.Check()