我在编写以下参数时遇到问题:我正在尝试:
这是我的代码部分:
parser.add_argument(
'--date',
#type=str,
action='store_true'
default=datetime.now()-timedelta(days=5))
)
if args.date:
# Use the User-inputted date
else:
# Use the default date as stated
如果我使用action
标记,则会收到引用__init__() got an unexpected keyword argument 'type'
的错误消息。如果我不使用action
并使用我最初使用的type
标志,则代码会回到使用默认值而不是用户输入的值。
欣赏任何建议。非常感谢提前!
答案 0 :(得分:1)
为什么你有action='store_true'
?
这意味着argparse
将忽略--date
之后发生的任何内容,而是根据args.date
是否True
将False
设置为--date
或if
提供与否。
您也不需要parser.add_argument(
'--date',
default=datetime.now()-timedelta(days=5))
)
:
args.date
基本上就是你所需要的一切。只是在您需要时忘记将ComboBox
转换为日期时间对象。
答案 1 :(得分:1)
有两个问题:
store_true
始终为真,因为它是默认值或用户输入的值,两者都不是假的 - y(日期时间对象和非空字符串永远不会)。argparse
是错误的操作,因为它告诉args.past
此切换没有任何价值(当用户将True
设置为--date
时使用开关,'store'
之后的任何内容都不会被视为此参数的一部分)。将其保留为默认str
。此外,datetime
是默认类型,如果要将用户输入解析为parser.add_argument(
'--past',
default=datetime.now() - timedelta(days=5))
实例,则为错误类型。
这有效:
args.past
但现在datetime
将是字符串(用户输入)或type=
实例(默认值)。您可能希望使用def to_datetime(s):
return datetime.strptime(s, '%Y%m%d')
parser.add_argument(
'--past',
type=to_datetime,
default=datetime.now() - timedelta(days=5))
参数将用户输入转换为日期时间对象。如:
>>> from argparse import ArgumentParser
>>> from datetime import datetime, timedelta
>>> def to_datetime(s):
... return datetime.strptime(s, '%Y%m%d')
...
>>> parser = ArgumentParser(prog='demo')
>>> parser.add_argument(
... '--past',
... type=to_datetime,
... default=datetime.now() - timedelta(days=5))
_StoreAction(option_strings=['--past'], dest='past', nargs=None, const=None, default=datetime.datetime(2018, 5, 9, 20, 42, 34, 806341), type=<function to_datetime at 0x10bf422f0>, choices=None, help=None, metavar=None)
>>> args = parser.parse_args()
>>> args.past
datetime.datetime(2018, 5, 9, 20, 42, 34, 806341)
>>> args = parser.parse_args(['--past', '20180514'])
>>> args.past
datetime.datetime(2018, 5, 14, 0, 0)
接受您订明的YYYYMMDD格式的日期。
演示:
var match = Regex.Match("välue", @"^[a-zA-Z0-9_-]+$", RegexOptions.CultureInvariant);
//match.Success is flase!!!