嘿,所以我使用argparse尝试生成季度报告。这就是代码的样子:
parser = argparse.ArgumentParser()
parser.add_argument('-q', "--quarter", action='store_true', type=int, help="Enter a Quarter number: 1,2,3, or 4 ")
parser.add_argument('-y', "--year", action='store_true',type=str,help="Enter a year in the format YYYY ")
args = parser.parse_args()
我收到的错误是:
TypeError: init ()得到了一个意外的关键字参数' type'
据我所知,argparse文档类型是add_argument函数的参数之一。我尝试删除它并将代码更新为:
parser = argparse.ArgumentParser()
parser.add_argument('-q', "--quarter", action='store_true', help="Enter a Quarter number: 1,2,3, or 4 ")
parser.add_argument('-y', "--year", action='store_true',help="Enter a year in the format YYYY ")
args = parser.parse_args()
然后我尝试使用:python scriptname.py -q 1 -y 2015
运行它,它给了我以下错误:
错误:无法识别的参数:2015年1月
我不知道为什么会这样。任何人都可以对此有所了解。
答案 0 :(得分:22)
action="store_true"
的含义是,如果在命令行中给出参数,则应在解析器中存储True
值。你真正想要的是存储给定年份(作为字符串)和季度(作为int)。
parser = argparse.ArgumentParser()
parser.add_argument('-q', "--quarter", type=int, help="Enter a Quarter number: 1,2,3, or 4 ")
parser.add_argument('-y', "--year", type=str, help="Enter a year in the format YYYY ")
args = parser.parse_args()
当您指定action='store_true
时,argparse在内部实例化一个_StoreAction
实例,其构造函数不接受type
参数(因为它始终是一个布尔值(True / False))。您无法提供action="store_true"
和'类型'在同一时间。
答案 1 :(得分:3)
System.Reflection
文档并不尽可能详细(但仍有比许多用户可以吸收的信息更多的信息)。
特别是,参数所需的实际信息随argparse
而变化。
action
parser.add_argument('-q', "--quarter", action='store_true', type=int, help="Enter a Quarter number: 1,2,3, or 4 ")
动作不接受任何参数(即nargs = 0)。它的默认值为store_true
,如果使用,则该属性设置为False
。
如果您希望用户提供这四个号码中的一个,我建议使用
True
https://docs.python.org/3/library/argparse.html#choices有一个类似的例子。
https://docs.python.org/3/library/argparse.html#action中的示例非常清楚每个动作类采用的参数。
有一个Python错误/问题正在讨论改进文档,或者在函数中给出不必要的参数时的错误消息。就目前而言,它是发出错误消息的Python子类定义。