我试图在函数之外获得'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
在所示的代码中,您从未实际调用ping_check()
,因此您的代码或多或少相当于:
#!/usr/bin/env python
print p1
然后很明显你试图使用一个还不存在的全局变量
也许你应该调用你的函数?确保hl
不是空的?这样你就至少分配了一次p1
。
对于任何想知道的人,这里是global
在python中的有效使用。请注意,我们不需要预定义全局变量,尽管这可能是一个很好的做法(这样您就可以获得一个已知的值,而不是一个NameError
)。
def fun():
global p1
p1 = 3
fun()
print p1
这是一个注释,但它实际上可能是答案。
正如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