Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 名称错误:全局名称';b';没有定义_Python_Global Variables_Getopt - Fatal编程技术网

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
函数工作原理的一个示例。在前面的编辑中,您似乎试图将未创建的文件作为文件名传递