IntelliJ Python 3 inspection "Expected a dictionary, got a dict" 是 super with **kwargs 的误报吗?
Is IntelliJ Python 3 inspection "Expected a dictionary, got a dict" a false positive for super with **kwargs?
我使用 Python 3 并想用自定义的 class 包装 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 上的警告是 "Expected a dictionary, got a dict",但它正在运行。这是误报警告还是可以在没有警告的情况下做得更好?此警告背后是否存在有助于避免的真正问题?
附带问题:使用
有区别吗
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 变异为您的心脏内容。
将存储在项目中的所有虚拟环境目录(例如 ./venv
)标记为已排除已用 PyCharm 2020.2.3.
为我解决了这个问题
为此:右键单击项目树中的虚拟环境目录,然后select:Mark Directory as
->
Excluded
。来自 https://youtrack.jetbrains.com/issue/PY-39715.
的解决方案
我使用 Python 3 并想用自定义的 class 包装 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 上的警告是 "Expected a dictionary, got a dict",但它正在运行。这是误报警告还是可以在没有警告的情况下做得更好?此警告背后是否存在有助于避免的真正问题?
附带问题:使用
有区别吗
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 变异为您的心脏内容。
将存储在项目中的所有虚拟环境目录(例如 ./venv
)标记为已排除已用 PyCharm 2020.2.3.
为此:右键单击项目树中的虚拟环境目录,然后select:Mark Directory as
->
Excluded
。来自 https://youtrack.jetbrains.com/issue/PY-39715.