检查是否将python内置代码用作变量或参数。

flake8-builtins的Python项目详细描述


https://travis-ci.org/gforcada/flake8-builtins.svg?branch=masterhttps://coveralls.io/repos/gforcada/flake8-builtins/badge.svg?branch=master&service=github

Flake8内置插件

检查是否将python内置代码用作变量或参数

想象一下这样的代码:

def max_values(list, list2):
    max = list[0]
    for x in list:
        if x > 0:
            max = x

    all_values = list()
    all_values.append(max)

    max = list2[0]
    for x in list2:
        if x > 0:
            max = x
    all_values.append(max)

    return all_values

max_values([3, 4, 5, ], [5, 6, 7])

最后一条语句没有像预期的那样返回[5, 7], 而是引发此异常:

Traceback (most recent call last):
  File "test.py", line 17, in <module>
    max_values([3,4,5], [4,5,6])
  File "bla.py", line 6, in max_values
    all_values = list()
TypeError: 'list' object is not callable

为什么?因为max_value函数的第一个参数是list一个python内置参数。 python允许重写它们,但在某些特定的用例中可能很有用, 一般的方法是not这样做,因为代码可能会突然中断,而没有清晰的跟踪。

示例

给定以下代码:

def my_method(object, list, dict):
    max = 5
    min = 3
    zip = (4, 3)

显示以下警告(通过flake8):

test.py:1:15: A002 "object" is used as an argument and thus shadows a python builtin, consider renaming the argument
test.py:1:23: A002 "list" is used as an argument and thus shadows a python builtin, consider renaming the argument
test.py:1:29: A002 "dict" is used as an argument and thus shadows a python builtin, consider renaming the argument
test.py:2:5: A001 "max" is a python builtin and is being shadowed, consider renaming the variable
test.py:3:5: A001 "min" is a python builtin and is being shadowed, consider renaming the variable
test.py:4:5: A001 "zip" is a python builtin and is being shadowed, consider renaming the variable

安装

使用pip安装:

$ pip install flake8-builtins

要求

  • Python2.7、3.5、3.6
  • 薄片8

许可证

GPL 2.0

变更日志

1.4.1(2018-05-11)

  • 修复1.4.0中的回归和与Flake8 Bugbear的交互。 [德克·托马斯]

1.4.0(2018-05-03)

  • 通过不假设节点是^{tt4},使代码更加健壮$ 但实际上是在检查。 [gforcada]
  • 也处理ast.Starred(即a, *int = range(4)) [gforcada]
  • 也处理列表,即[a, int] = 3, 4 [gforcada]

1.3.1(2018-04-30)

1.3.0(2018-04-13)

1.2.3(2018-04-10)

1.2.2(2018-04-03)

1.2.1(2018-04-01)

  • 从主分支重新发布1.2。 [gforcada]

1.2(2018-04-01)

  • 修复for循环中的错误消息。 [格沃卡达]

  • 检查以下地方是否有可能被遮蔽的建筑:

    • 打开('/tmp/bla.txt')为int
    • 除了值错误为int
    • [int表示范围(4)内的int]
    • 从zope.component导入提供为int
    • 将zope.component导入为int
    • 类int(对象)
    • 定义整数()
    • 异步定义int()
    • 范围(4)中的int异步
    • 将open('/tmp/bla.txt')作为int异步

    [gforcada]

1.1.1(2018-03-20)

  • 在for循环中分配的变量不仅可以是元组,还可以是元组内的元组。 [多普勒频移]

1.1.0(2018-03-17)

  • 更新更多的trove分类器。 [gforcada]
  • 检查在for循环中分配的变量。 感谢索博列夫的报道! [gforcada]

1.0.post0(2017-12-02)

  • 更新自述文件。 [Dmytrolitvinov]
  • 更新trove分类器。 [dirn]

1.0(2017-08-19)

0.4(2017-05-29)

  • 对类属性使用不同的代码。 [卡拉马诺列夫]

0.3.1.post0(2017-05-27)

  • 释放通用轮,而不仅仅是python 2轮。 [gforcada]
  • 更新trove分类器。 [gforcada]

0.3.1(2017-05-27)

  • 修复stdin处理。 [Sangiovanni]

0.3(2017-05-15)

  • 处理stdin,这是flake8集成到编辑器中的方式。 [gforcada]
  • 测试Python2.7、3.5、3.6和pypy。 [gforcada]

0.2(2016-03-30)

  • 白名单一些内置项。 [gforcada]

0.1(2016-03-04)

  • 初次发行 [gforcada]
  • 加上建筑和其他东西。 [gforcada]
  • 添加实际代码。 [gforcada]
  • 放弃对Python3.3的支持,只测试Python2.7和Python3.4。 [gforcada]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何在不使用java安装outlook的情况下以编程方式创建pst文件?   如何在java中比较泛型方法中的数组?   JavaFXHTML节点元素   java H2数据库要降低的连接设置无效(2019)   安卓 hilt中的java依赖循环   java这个结构什么时候有意义?   带有模式和匹配器的Java正则表达式   来自类变量的java JNI jstring?   尝试从socket读取时发生java非法阻止模式异常   绑定中使用Moxy的java接口映射。xml不能使用多个接口?   java如何仅静音来电铃声而不静音短信   下载时,java无法获取音频进度条   java SavedIntanceState。getBoolean()使我的应用程序崩溃(我想)   java图像的永久位置?   mysql Java:将多个独立脚本重构为一个脚本   在Windows上以Java访问iTunes歌词数据   java改进BaseUrl和API   为什么有必要在OSGi security中为java security manager授予所有权限