argparse没有采用默认选项

时间:2016-08-23 02:35:45

标签: python

有谁能告诉我为什么在下面采用默认选项?

代码:

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'

3 个答案:

答案 0 :(得分:2)

if results.force_edl:
    force_edl = results.force_edl

上述if内部的分配没有发生的原因是:

>>> results
Namespace(force_edl=False)
>>> results.force_edl
False

results.force_edlboolean,其值为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值,因此您会收到此错误。

  

在使用之前,您必须为其指定一些值。