当前位置: 首页 > 面试题库 >

是否可以使用argparse捕获任意一组可选参数?

鱼恩
2023-03-14
问题内容

是否可以用来argparse捕获任意一组可选参数?

例如,以下两个都应被接受为输入:

python script.py required_arg1 --var1 value1 --var2 value2 --var3 value3

python script.py required_arg1 --varA valueA --var2 value2 --varB valueB

先验的 我不知道会指定哪些可选参数,但是会相应地处理它们。


问题答案:

这是一种黑客手段,但效果很好:

检查未添加的参数并添加它们

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("foo")
parser.add_argument("-bar", type=int)
# parser can have any arguments, whatever you want!

parsed, unknown = parser.parse_known_args() # this is an 'internal' method
# which returns 'parsed', the same as what parse_args() would return
# and 'unknown', the remainder of that
# the difference to parse_args() is that it does not exit when it finds redundant arguments

for arg in unknown:
    if arg.startswith(("-", "--")):
        # you can pass any arguments to add_argument
        parser.add_argument(arg, type=<your type>, ...)

args = parser.parse_args()

例如:

python3 arbitrary_parser.py ha -bar 12 -extra1 value1 -extra2 value2

那么结果将是

args = Namespace(bar=12, foo='ha', extra1='value1' extra2='value2')


 类似资料:
  • 问题内容: 此问题与跨域资源共享(CORS)有关。 如果在发出CORS请求时出现错误,Chrome(以及AFAIK其他浏览器)会将错误记录到错误控制台。消息示例可能如下所示: XMLHttpRequest无法加载。原产地不被访问控制允许来源允许的。 我想知道是否有办法以编程方式获取此错误消息?我尝试将调用包装在try/catch中,也尝试添加事件处理程序。两者均未收到错误消息。 问题答案: 看到:

  • 当输入字符串时,它将根据需要匹配整个字符串。但当馈入时,我希望它与匹配;相反,它匹配,即整个字符串。(这只是为了说明。当然,此示例可以由处理,但这并不重要。捕获组擦除的实际用法往往是在循环中,而这些循环通常执行的迭代次数远远超过2次。) 另一种方法也不是理想的: 请注意,当循环“展开”时,这两种方法都可以正常工作,因为它们不再需要擦除已经执行的捕获: 因此不能使用最简单的条件形式,而必须使用更复杂

  • 问题内容: 我有一个脚本,打算像这样使用: 是一个位置参数,其定义如下: 我希望它是可选的:未指定时,它应该只是。 不幸的是,当我不指定参数时,我得到了。 问题答案: 使用(或如果您需要多个目录) 扩展示例:

  • 这个问题不是关于Rollbar tho:)

  • 是否可以用交易发送任意文本? 是的。文本应该是ASCII编码的,并在交易的数据中以十六进制字符串的形式提供。示例如下: RawTransaction.createTransaction( <nonce>, GAS_PRICE, GAS_LIMIT, "0x<address>", <amount>, "0x<hex encoded text>"); byte[] signedMes

  • 问题内容: 任何Throwable都可以被捕获 输出: 因此,如果在初始化块期间做不好的事情,我希望能够捕获ExceptionInInitializerError。但是,以下操作无效: 输出: 并且如果我更改代码以另外捕获ArrayIndexOutOfBoundsException 被捕获的是ArrayIndexOutOfBoundsException: 谁能告诉我为什么呢? 问题答案: 顾名思义