gpt4 book ai didi

python - IntelliJ Python 3 检查 "Expected a dictionary, got a dict"是否是带有 **kwargs 的 super 的误报?

转载 作者:IT老高 更新时间:2023-10-28 20:41:58 26 4
gpt4 key购买 nike

我使用 Python 3 并想用一个自定义类来包装 argparse.ArgumentParserformatter_class=argparse.RawDescriptionHelpFormatter 默认。我可以成功地做到这一点,但是带有 Python 插件 (PyCharm) 的 IntelliJ IDEA 2017.1 会针对以下代码发出警告:

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签名越明确越好,对吧?

最佳答案

是的,这似乎是误报。

您询问了 formatter_class=kwargs.pop('formatter_class', argparse.RawDescriptionHelpFormatter)。请不要那样做。变异的kwargs,作为下一个参数出现,看起来很糟糕。此外,默认关键字 args 应该设置为一个简单的常量,而不是一些可变的数据结构,因为在导入时评估和在运行时评估之间存在很大差异。参见例如http://www.effbot.org/zone/default-values.htm .通常的习惯用法是在签名中使用 formatter_class=None,然后在正文中测试 None,然后将 kwargs 更改为您想要的内容。

关于python - IntelliJ Python 3 检查 "Expected a dictionary, got a dict"是否是带有 **kwargs 的 super 的误报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43542352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com