作者:cool瀚_325 | 来源:互联网 | 2023-02-06 03:54
我使用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的警告是"预期字典,得到字典",但它正在工作.这是一个误报警告,还是在没有警告的情况下可以做得更好?这个警告背后是否有一个真正的问题,它有助于避免?
附带问题:使用
formatter_class = kwargs.pop('formatter_class', argparse.RawDescriptionHelpFormatter)
而不是在签名中明确定义命名参数是否有区别?根据PEP20,签名中更明确的更好,对吧?
1> J_H..:
是的,这似乎是误报.
你问过formatter_class=kwargs.pop('formatter_class', argparse.RawDescriptionHelpFormatter)
.请不要这样做.变异kwargs
,似乎是下一个论点,似乎是坏的.此外,默认关键字args应设置为简单常量而不是某些可变数据结构,因为在导入时评估和运行时评估之间存在很大差异.参见例如http://www.effbot.org/zone/default-values.htm.通常的成语将formatter_class=None
在签名中,然后在身体中你测试无,并且你将kwargs变成你心中的内容.
一周前,Pavel Karateev在https://youtrack.jetbrains.com/issue/PY-27935中解释说这只是一个错误,现在修复了pycharm 2017.3.3 RC; cf base rep-by in base bug https://youtrack.jetbrains.com/issue/PY-27686