python - 是什么导致了这个神秘的 pylint E1101 错误?

标签 python pylint

我有以下代码:

#!/usr/bin/env python                                                                 
"""pylint behavior test"""                                                            
                                                                                      
                                                                                      
def autodetect_method(method, data):                                                  
    """autodetect method"""                                                           
    if not method:                                                                    
        method = 'POST' if data else 'GET'                                            
    else:                                                                             
        method = method.upper()                                                       
                                                                                      
    return method
pylint产生以下错误:
tt.py:10:17: E1101: Class 'method' has no 'upper' member (no-member)
重命名method不报错其他东西的变量,例如至 method_name !
所以,我知道几种方法来摆脱这个错误信息。但我很好奇变量名 method 有什么特别之处为什么会产生错误?
以防万一这个问题是特定于版本的,我的版本是:
$ pylint --version
pylint 2.4.4
astroid 2.3.3
Python 3.8.5 (default, Jan 27 2021, 15:41:15) 
[GCC 9.3.0]

最佳答案

有一种方法可以满足您的好奇心 - 调试。
你可以运行 pylint来自同一个文件并跟踪其行为。

if __name__ == "__main__":
    import pylint
    import sys
    sys.argv.append(__file__)
    pylint.run_pylint()

其实说起来容易做起来难,我已经试过了,但无法理解具体发生了什么。在高级术语中,pylint尝试推断 method 的类型在表达式 method.upper() 中,自己做不到,陷入astroid图书馆,还有 method类型推断为 ClassDef.method .明明字methodastroid 来说意味着特别的东西,就像其他一些词一样。比如同样的E1101如果您使用名称 function,则会检测到错误而不是 method .
看起来它的行为以某种方式与内置名称有关,但是 functionmethod不是内置函数。我猜 astroid如果 ast 的“别名”,则将它们视为某种类型类(class),但我不确定。

关于python - 是什么导致了这个神秘的 pylint E1101 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66614262/

相关文章:

python - 为什么python list没有len()方法

python - Pandas:重复数据删除时如何创建 "master"记录

python - 创建一个自动填充空值的函数

python - SymPy 基础知识

python - 如何阻止 flake8 和 pylint 提示 shebang 线超过最大字符数?

python - 查找范围内的圆间隔

python - Pylint 使用 git-pylint-commit-hook 忽略文件

python-3.x - 无法在 Windows 上的 Git Bash(Windows 应用商店)中安装 pylint

python - Pylint 与 Django

python - 没有运气 pip-installing pylint 用于 Python 3