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

标签 python python-3.x intellij-idea super keyword-argument

我使用 Python 3 并想用一个自定义类来包装 argparse.ArgumentParser formatter_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/

相关文章:

python - PyQt 消息框崩溃

python-3.x - 在 Pandas `transform()` 中使用自定义函数(中值绝对偏差)

php - switch 语句中的 @noinspection 注释残渣清理

python-3.x - 使用 Pytorch Lightning DDP 时记录事情的正确方法

java - 在 Intellij 的代码完成中隐藏基类方法?

java - 像 Windows 一样的 Linux 上的想法键盘映射

python - Django 。测试用例未运行

Python line_profiler 找不到模块

python - 如何获得成功和错误代码?

python - beautifulsoup4 : placing a for loop unwrapping tags into a definition (python3)