NameError: имя Class не определено (Python)

Итак, я пытаюсь сделать файлы сохранения и загрузки для текстовой игры ... Сохранение работает и перезаписывает сохранение, если вы сохраняете снова. Но загрузка вызывает ошибку NameError.

def save():
    my_file = open("save.txt", "w")
    my_file.write(Class + "\n")
    my_file.write(level + "\n") 
    my_file.write(str(hp) + "\n")
    my_file.write(str(atk) + "\n")
    my_file.write(str(Def) + "\n")
    my_file.write(str(spd)+ "\n")
    my_file.write(str(ene)+ "\n")
    my_file.write(str(race1)+ "\n")
    my_file.close()

def load():
    infile = open("save.txt")

    lines = infile.readlines()

    line_number = 0

    while line_number < len(lines):

        Class = lines[line_number]
        level = lines[line_number + 1]
        hp = lines[line_number + 2]
        atk = lines[line_number + 3]
        Def = lines[line_number + 4]
        spd = lines[line_number + 5]
        ene = lines[line_number + 6]
        race1 = lines[line_number + 7]

        line_number += 8
        print(Class, level, hp, atk, Def, spd, ene, race1)


    infile.close()
    identify()

Выше определения сохранения и загрузки.

Вот определение ввода класса:

def class_level():
        global Class
        global level
        Class = input("Please input your class: ")
        print()
        level = input("Please input your level: ")
        print()
        race()    

А вот определение indentify:

def identify():
    global hp
    global atk
    global Def
    global spd
    global ene
    if re.match(r"warrior", Class, re.I):  <---- This is the line the error is on, Class not defined
    print()

Может кто-нибудь сказать мне, что я сделал не так? Он загрузит файл и отобразит его ... но затем скажет, что Class не определен в def identify. Спасибо.


person Nathan Cave    schedule 14.10.2014    source источник
comment
Кто вызывает class_level и load? Они в одном модуле? Глобалы глобальны только относительно текущего модуля!   -  person Juergen    schedule 14.10.2014


Ответы (1)


В Python принцип работы global заключается в том, что он не только определяет переменную как глобальную переменную. Он добавляет переменную в локальное пространство имен из глобального пространства имен, если оно есть. Если его нет, он создает глобальный экземпляр и добавляет его к локальному namepsace. У вас может быть Class в качестве переменной в глобальном пространстве имен, но внутри вашего identify локального пространства имен функции Class отсутствует. Вам нужно будет добавить Class в локальное пространство имен identify. Вы делаете это, добавляя строку global Class. Теперь в локальном пространстве имен есть ссылка на переменную Class

def identify():
    global hp
    global atk
    global Def
    global spd
    global ene
    # You need to mention global Class as well
    global Class
    if re.match(r"warrior", Class, re.I): 
    print()
person ashwinjv    schedule 14.10.2014