You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

全局变量未赋值引用报错:如何判断Python全局变量是否为空?

全局变量空值判断与未赋值引用问题解决

首先看你的代码里有个容易踩的坑:你在Example类里定义的patientName = 0是类属性,但函数A里用global patientName声明的是一个完全独立的模块级全局变量——这俩根本不是同一个东西!这也是后续报错的根源之一:你以为在类里初始化了变量,但实际函数里用的是另一个没被初始化的全局变量。

当点击事件触发C函数时,模块级的patientName还没被A函数赋值,甚至连定义都没有(因为global只是声明要使用全局变量,但如果全局作用域里压根没这个变量,只有在赋值时才会创建它),所以直接访问就会抛出NameError: name 'patientName' is not defined。

下面给你两种解决方案,根据你的实际需求选:


方案一:正确使用模块级全局变量

先在模块最顶部初始化全局变量为None(明确表示未赋值状态),之后就可以安全判断了:

# 提前在模块级初始化全局变量,避免未定义报错
patientName = None

class Example():
    # 如果不需要类属性,这里可以留空或者做其他定义
    pass

def A():
    global patientName
    patientName = "12"

def B():
    print(patientName)  # 调用A后打印"12",否则打印None

def C():
    # 先判断是否未赋值
    if patientName is None:
        print("patientName还没有被赋值哦!")
    elif patientName != "123":
        print("patientName的值不是123")
    else:
        print("patientName的值是123")

关键说明:

  • patientName = None提前在全局作用域创建了变量,哪怕还没赋有效值,也不会出现未定义报错
  • 判断空值用is None而不是== None,因为None是Python的单例对象,is判断更准确高效

方案二:用类属性替代全局变量(更推荐)

既然你已经定义了Example类,不如直接用类属性来存储值,这样更符合面向对象的设计,也避免了全局变量的混乱:

class Example():
    # 初始化类属性为None
    patientName = None

def A():
    # 直接通过类名访问类属性,不需要global声明
    Example.patientName = "12"

def B():
    print(Example.patientName)

def C():
    if Example.patientName is None:
        print("patientName尚未赋值")
    elif Example.patientName != "123":
        print("patientName的值不是123")
    else:
        print("patientName的值是123")

关键说明:

  • 类属性属于类本身,所有函数都可以通过Example.patientName访问,不需要global关键字
  • 同样提前初始化为None,确保触发C时可以安全判断

额外提示:如果一定要检查变量是否存在(不推荐)

如果你不想提前初始化变量,也可以通过检查全局命名空间来判断变量是否存在,但这种写法不够清晰,一般不推荐:

def C():
    if 'patientName' not in globals():
        print("patientName还没被定义")
    elif globals()['patientName'] != "123":
        print("patientName的值不是123")

这种方式虽然能解决报错,但代码可读性差,还容易引入其他问题,所以优先推荐前面两种提前初始化的方案。

内容的提问来源于stack exchange,提问作者Cowarrior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:56:17