Python 名称错误:全局名称';b';没有定义
我有一个脚本,其结构如下:Python 名称错误:全局名称';b';没有定义,python,global-variables,getopt,Python,Global Variables,Getopt,我有一个脚本,其结构如下: def func(): bfile=open(b, 'r') cfile=open(c, 'r') dfile=open(d, 'r') if __name__=='__main__': if len(sys.argv)==1: print 'guidence' sys.exit() else: opts,args=getopt.getopt(sys.argv,'b:c:d:a'
def func():
bfile=open(b, 'r')
cfile=open(c, 'r')
dfile=open(d, 'r')
if __name__=='__main__':
if len(sys.argv)==1:
print 'guidence'
sys.exit()
else:
opts,args=getopt.getopt(sys.argv,'b:c:d:a')
a=False
for opt,arg in opts:
if opt=='-a':
a=True
elif opt=='-b':
b=arg
elif opt=='-c':
c=arg
elif opt=='-d':
d=arg
func()
我是这样运行的:
# python script.py -b file1 -c file1 -d file1
in func()
NameError: global name 'b' is not defined
我还定义了一个全局文件1。但是没有工作
更新
我知道问题出在哪里:
打印选项的结果是[]
。
它没有价值。
为什么?您必须将文件名传递给函数。在您的情况下,它应该如下所示:
def func(b, c, d):
bfile = open(b, 'r')
cfile = open(c, 'r')
dfile = open(d, 'r')
您可以通过以下方式调用它:
b = 'nameB.txt'
c = 'nameC.txt'
d = 'nameD.txt'
func(b, c, d)
你有两个问题
首先,如果遇到非选项,getopt
将停止。因为sys.argv[0]
是脚本名,所以它不是一个选项,解析在那里停止。
您想将sys.argv[1://code>传递到getopt
这就是导致打印选项
显示[]
的原因,而且由于选项
为空,因此永远不会创建全局变量,这就是抱怨它们不存在的原因
其次,由于-a
需要一个参数,因此需要在它后面加一个冒号
总之,这应该是可行的:
opts, args = getopt.getopt(sys.argv[1:], 'b:c:d:a:')
另外,您不应该在全局函数中传递参数。您忘记了def
之前的func()
谢谢。我更新了问题抱歉伙计们;显然我不能回答这个问题!其他人试试看!这不是namererror
错误的原因。这是asnwer的问题:'abc.txt'
这是open
函数工作原理的一个示例。在前面的编辑中,您似乎试图将未创建的文件作为文件名传递