名称错误:未定义全局名称"b"



我有一个脚本,如果结构:

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。但是没有工作。

更新

我知道问题在哪里:print opts的结果是[]。它没有价值。为什么?

您有两个问题。

首先,如果getopt遇到非选项,则停止。由于 sys.argv[0]是脚本名称,所以它是一个非选项,解析停止了。
您想将sys.argv[1:]传递给getopt

这是导致print opts显示[]的原因,并且由于opts是空的,因此从未创建全局变量,这是它们不存在的投诉的地方。

第二,由于-a想要一个参数,因此您需要一个结肠。

总的来说,这应该有效:

opts, args = getopt.getopt(sys.argv[1:], 'b:c:d:a:')

另外,您不应该通过全球参数。

您必须将文件名传递给该功能。在您的情况下,应该看起来像这样:

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)

相关内容

  • 没有找到相关文章