python - 如果使用不允许的类型调用 add_argument() 是否可能引发错误?
问题描述
我想禁止将某些类型声明为 argparse 参数。如果使用不允许的类型调用 add_argument() 是否可以禁止某些类型并引发错误?
伪代码例如:
parser = argparse.ArgumentParser(disallowed_types=[bool, str])
parser.add_argument('--seed', type=int, default=0) # Ok
parser.add_argument('--frac', type=float, default=0.1) # Ok
parser.add_argument('--flag', type=bool, default=False) # Raise an error
parser.add_argument('--name', type=str) # Raise an error
解决方案
您可以子类化ArgumentParser
.
import argparse
class MyParser(argparse.ArgumentParser):
def __init__(self, disallowed_types, *args, **kwargs):
self.disallowed_types = disallowed_types
super().__init__(*args, **kwargs)
def add_argument(self, *args, **kwargs):
arg_type = kwargs.get('type')
if arg_type in self.disallowed_types:
raise TypeError('Using {} is disallowed'.format(arg_type))
return super().add_argument(*args, **kwargs)
parser = MyParser(disallowed_types=(bool, str))
parser.add_argument('--seed', type=int, default=0) # Ok
parser.add_argument('--frac', type=float, default=0.1) # Ok
parser.add_argument('--flag', type=bool, default=False) # Raise an error
Traceback (most recent call last):
File "main.py" in <module>
parser.add_argument('--flag', type=bool, default=False) # Raise an error
File "main.py" in add_argument
raise TypeError('Using {} is disallowed'.format(arg_type))
TypeError: Using <class 'bool'> is disallowed
推荐阅读
- mysql - TypeError:在带有 SQL 查询的 Node js 中提供时,参数回调必须是一个函数
- python - 如何在 python 中处理具有许多特性的 LSTM?
- haskell - 递归函数如何在 Haskell 中工作
- javascript - 如何以这种形式将 HTML 与 Javascript 分开?
- loops - 这段代码的归纳不变量是什么?
- spring-boot - Spring Boot - Tomcat - Apache2 - HTTP 503 错误 - ProxyIOBufferSize
- javascript - “x”不是函数
- azure - Azure 函数:具有不同身份验证的多个函数
- docker - 如何从 Docker 容器连接到远程服务
- swift - 从 UIDatePicker 警报中获取选定的日期