我正在尝试在函数外部获取'p1'变量的值。我已将其定义为全局变量,但我无法引用它在函数之外。它给了我错误"NameError: global name 'p1' is not defined"
以下是我的代码。请让我知道如何在我的函数和函数之外得到全局变量的值。也可以在其他函数中引用它
#!/bin/usr/python
import subprocess
import string
def ping_check():
global p1
with open ('yst-host.txt') as hl:
for host in hl:
print host
p1 = subprocess.call("ping -c2 " + string.strip(host)+ "> /dev/null", shell=True)
print "Value of P1 is: ", p1
#ping_check()
print p1
答案 0 :(得分:3)
在显示的代码中,您实际上从不致电ping_check()
,因此您的代码或多或少等同于:
#!/usr/bin/env python
print p1
然后很明显,您正在尝试使用尚未存在的全局变量。
也许你应该打电话给你的功能?并确保hl
不为空?这样您就可以至少分配一次p1
。
对于任何想知道的人,这里是python中global
的有效使用。请注意,我们不需要预定义全局变量,尽管这可能是一个好习惯(因此您可以获得已知值而不是NameError
)。
def fun():
global p1
p1 = 3
fun()
print p1
答案 1 :(得分:0)
这将是一个评论,但实际上可能就是答案。
正如sharth指出的那样,您不需要预先声明全局变量来使用它。 但是,在为其分配值后,将其添加到globals()
(并且可以在函数外部无NameError
访问),而不是在global
语句之后。这意味着,您应该检查您的代码是否到达了分配行。
以下是一个例子:
def more_fun():
global am_i_defined
print globals() #doesn't include am_i_defined
am_i_defined = True
print globals()
more_fun()
print am_i_defined