为了账号安全,请及时绑定邮箱和手机立即绑定

python中的全局变量名称未定义错误

python中的全局变量名称未定义错误

MYYA 2023-09-19 17:35:29
if admin.isUserAdmin(): # This is on zero indent it's not inside a function or any other block  if n == 0:    global nzero    nzero = df.to_string()    print(nzero)  elif n > 0:    global ntrue    ntrue = df.head(n).to_string()    print(ntrue)  while live_update:    if n == 0:      global nzero2      nzero2 = df.to_string()      print(nzero2)    elif n > 0:      global ntrue2      ntrue2 = df.head(n).to_string()      print(ntrue2)print(nzero) #error nzero is not defined我有更复杂的代码,但为了方便起见,我简化了事情。在上面的程序中,我想让nzero、nzero2、ntrue 和 ntrue2 成为全局的,即它应该在 if 块之外可用。但是当我在外面使用它时,它给我错误说 nzero is not Defined 同样适用于 nzero2、ntrue、ntrue2
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

如果所有代码确实都在模块范围内,那么该global关键字无论如何都不会执行任何操作。您只需要初始化所有名称,因为并非所有分支都必须分配给它们。


nzero = None

ntrue = None

nzero2 = None

ntrue2 = None

n = None  # Or something? Who knows?


if admin.isUserAdmin():

    if n == 0:

        nzero = df.to_string()

        print(nzero)

    elif n > 0:

        ntrue = df.head(n).to_string()

        print(ntrue)

    while live_update:

        if n == 0:

            nzero2 = df.to_string()

            print(nzero2)

        elif n > 0:

            ntrue2 = df.head(n).to_string()

            print(ntrue2)


查看完整回答
反对 回复 2023-09-19
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

由于您的代码已经在全局范围内,因此无需使用global. 所有变量都已经是全局的。


您会收到错误,因为某些变量是在 if 语句的范围内定义的。如果该 if 子句不执行,则该变量稍后不可用。要解决这个问题,只需在 if 语句之前将变量初始化为合理的值即可:


nzero = False

if admin.isUserAdmin():

...


查看完整回答
反对 回复 2023-09-19
?
繁花如伊

TA贡献2012条经验 获得超12个赞

问题就出在这里:


if n == 0:

  global nzero

  nzero = df.to_string()

  print(nzero)

elif n > 0:

  global ntrue

  ntrue = df.head(n).to_string()

  print(ntrue)

如果n不是0,则nzero永远不会被定义。


查看完整回答
反对 回复 2023-09-19
  • 3 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信