【问题标题】:How to make a python script be stringent on checking parameters passed in?如何使python脚本严格检查传入的参数?
【发布时间】:2021-03-06 05:45:41
【问题描述】:

我有以下脚本,它只是解析命令行中传递的参数

import argparse

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='My test script')
    parser.add_argument('-somearg', dest='somearg', type=str, required=True, help='Help yourself')
    parser.add_argument("-somemorearg", dest='somemorearg', action='store_true', help='Help yourself')   # Treated as boolean if passed in
    parser.add_argument("-somemoreargagain", dest='somemoreargagain', action='store_true', help='Help yourself') # Treated as boolean if passed in
    args = parser.parse_args()

    print('Your input was:         ' + args.somearg)
    if args.somemorearg == True:
        print('Second parameter is true: ')
    if args.somemoreargagain == True:
        print('Second parameter is true: ')

以下是我调用有效脚本的方式:

python my_script.py -somearg xyz -somemorearg -somemoreargagain

上面很棒!
但是如果我调用我的脚本时有如下轻微的拼写错误,那也可以吗?这是python的奇怪行为!请注意,在下面的调用中,我在最后一个参数中缺少n,它应该是somemoreargagain

python my_script.py -somearg xyz -somemorearg -somemoreargagai

上述行为在 python 中是默认的吗?我想让脚本在参数检查中严格。

如果传入的参数不准确匹配,如何让脚本抛出错误?我希望我的脚本只接受-somearg-somemorearg-somemorearg

我正在使用 Python 3+

【问题讨论】:

  • 请注意我的问题是“如果条件不匹配,如何让脚本抛出错误?”
  • allow_abbrev 参数是最近添加的,让您可以控制缩写的处理。但是您也可以选择足够不同(且短)的参数标志,以使这种错误是不可能的。您的懒惰用户会为此感谢您。

标签: python python-3.x argparse


【解决方案1】:

使用部分参数名称可以与 argparse 一起使用,只要它的长度足以仅对一个参数是唯一的。如果您键入 python my_script.py -somearg xyz -somemorear,同样的方法将不起作用,因为 -somemorear 将是 2 个参数的模棱两可的名称

【讨论】:

  • 此信息。是否有避免这种行为的标准方法,或者我应该通过将每个“已知参数”与我期望的字符串值进行比较来手动检查?
  • 这就是 argparse 的工作原理,您可以查看文档以了解禁用它的任何方法
  • 是否可以通过执行 args.somearg.something 来获取传递给脚本的内容?不允许我更改默认行为的python非常不酷
  • 显然您可以将 allow_abbrev=False 传递给 argparse 构造函数以禁用此功能,我花了不到 30 秒的时间在文档中找到
猜你喜欢
  • 1970-01-01
  • 2015-04-06
  • 2013-09-05
  • 2014-08-01
  • 2017-09-14
  • 1970-01-01
  • 2020-05-08
  • 2017-03-27
相关资源
最近更新 更多