【问题标题】:NameError: name 'Class' is not defined (Python)NameError:名称“类”未定义(Python)
【发布时间】:2014-10-14 19:36:30
【问题描述】:

所以我正在尝试为基于文本的游戏制作保存和加载文件... 保存有效,如果再次保存,则会覆盖保存。 但是加载会引发 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()    

这里是识别定义:

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()

谁能告诉我我做错了什么?它将加载文件并显示它.. 但是然后说在 def 标识中没有定义 Class。 谢谢。

【问题讨论】:

  • 谁调用class_level并加载?它们在同一个模块中吗?全局变量只是相对于当前模块的全局变量!

标签: python nameerror defined


【解决方案1】:

在 python 中,全局的工作方式是它不仅将变量定义为全局变量。如果存在,它将变量从全局命名空间添加到本地命名空间。如果它不存在,它会创建一个全局实例并将其添加到本地名称空间。您可能将 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 2020-09-04
    • 2021-10-18
    • 2016-08-09
    相关资源
    最近更新 更多