Python 如果使用不允许的类型调用add_argument(),是否可能引发错误?

Python 如果使用不允许的类型调用add_argument(),是否可能引发错误?,python,parsing,arguments,argparse,Python,Parsing,Arguments,Argparse,我不允许将某些类型声明为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)

我不允许将某些类型声明为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
import argparse
类MyParser(argparse.ArgumentParser):
def uuu init uuuuu(自我、不允许的类型、*args、**kwargs):
self.disallowed_type=不允许的_类型
super()
def add_参数(self、*args、**kwargs):
arg_type=kwargs.get('type'))
如果arg_类型为self.disallowed_类型:
raise TypeError('不允许使用{}'。格式(arg_类型))
return super().add_参数(*args,**kwargs)
parser=MyParser(不允许的类型=(bool,str))
parser.add_参数('--seed',type=int,default=0)#确定
parser.add#u参数('--frac',type=float,default=0.1)#确定
parser.add_参数('--flag',type=bool,default=False)#引发错误
回溯(最近一次呼叫最后一次):
文件“main.py”位于
parser.add_参数('--flag',type=bool,default=False)#引发错误
add_参数中的文件“main.py”
raise TypeError('不允许使用{}'。格式(arg_类型))
TypeError:不允许使用