有谁能告诉我为什么在下面采用默认选项?
import argparse
parser = argparse.ArgumentParser(description='SCRIPT')
parser.add_argument('-fe','--force_edl',action='store',dest='force_edl',choices=['True', 'False'], default = False,help='<Required> Enable EDL loading by default..',required=False)
global force_edl
results = parser.parse_args()
if results.force_edl:
force_edl = results.force_edl
print "force_edl"
print force_edl
追踪(最近一次呼叫最后一次):
文件“defaultparse.py”,第10行,
print force_edl
NameError:未定义全局名称'force_edl'
答案 0 :(得分:2)
if results.force_edl:
force_edl = results.force_edl
上述if
内部的分配没有发生的原因是:
>>> results
Namespace(force_edl=False)
>>> results.force_edl
False
results.force_edl
是boolean
,其值为False
。你需要做的是:
if 'force_edl' in results:
force_edl = results.force_edl
或者,既然您已经知道results
将始终拥有force_dl
,请直接指定:
force_edl = results.force_edl
答案 1 :(得分:0)
results.force_edl
始终为False
。您在条件检查后更新全局变量,永远不会执行。并且全局force_edl
仍然未定义,因为您在声明时没有为其分配任何值。
执行以下操作:
global force_edl = False
答案 2 :(得分:0)
发生错误是因为变量force_edl只是“ DECLARED ”而不是“ DEFINED ”并且有一些值。
它仅在if
块中分配,但if
块将不会执行,因为默认值将为false值,因此您会收到此错误。
在使用之前,您必须为其指定一些值。