我使用Python 3,希望用一个自定义类来包装argparse.ArgumentParser
,并默认设置formatter_class=argparse.RawDescriptionHelpFormatter
。我可以成功地做到这一点,但是IntelliJ IDEA 2017.1与Python插件(PyCharm)对以下代码发出了警告:
class CustomParser(argparse.ArgumentParser):
def __init__(self, formatter_class=argparse.RawDescriptionHelpFormatter, **kwargs):
# noinspection PyArgumentList
super().__init__(formatter_class=formatter_class, **kwargs) # warning in this line for the last argument if suppression comment above removed
如果使用IntelliJ的抑制命令去掉kwargs的注释,那么"Expected a dictionary, got a dict"警告就会消失,但是这段代码仍然有效。这是一个误报警告吗?还是有更好的方法可以避免这个警告?这个警告背后是否存在真正的问题?
另外一个问题:使用
formatter_class = kwargs.pop('formatter_class', argparse.RawDescriptionHelpFormatter)
与在签名中明确定义命名参数有什么区别吗?根据PEP20,在签名中更加明确是更好的,对吗?
CustomParser(formatter_class=argparse.HelpFormatter)
更改默认格式化程序,我会收到警告“预期类型为'Type[RawDescriptionHelpFormatter]',而实际得到的是'Type[HelpFormatter]'”,可以通过# noinspection PyTypeChecker
来抑制。这也是误报吗? - jan