跳转到主要内容

检查Plone项目中认为有害的hasattr函数

项目描述

https://github.com/gforcada/flake8-plone-hasattr/actions/workflows/testing.yml/badge.svg?branch=master https://coveralls.io/repos/gforcada/flake8-plone-hasattr/badge.svg?branch=master

Flake8 Plone hasattr插件

Python标准hasattr在Plone项目中被认为是危险的。

hasattr的(隐藏)问题是它会吞没异常,而在您的正常业务逻辑中您真的不希望这样。

特别是在Plone环境中,这可能会导致吞没数据库错误或权限异常等。

以以下代码为例

>>> class Foo(object):
...     @property
...     def my_attr(self):
...         raise ValueError('nope, nope, nope')
...
>>> bar = Foo()
>>> bar.my_attr
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in my_attr
ValueError: nope, nope, nope
>>> hasattr(Foo, 'my_attr')
True
>>> hasattr(bar, 'my_attr')
False

应该做的是

>>> getattr(bar, 'my_attr', None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in my_attr
ValueError: nope, nope, nope

或者,如果您想处理异常

>>> try:
...     value = getattr(bar, 'my_attr', None)
... exception ValueError:
...     value = None

此插件基于在plone.recipe.codeanalysis中存在的python检查器。

安装

使用pip安装

$ pip install flake8-plone-hasattr

要求

  • Python 3.8, 3.9, 3.10, 3.11和pypy3

  • flake8

许可协议

GPL 2.0

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分发

flake8_plone_hasattr-1.1.1.tar.gz (13.3 kB 查看哈希值)

上传时间 源代码

构建分发

flake8_plone_hasattr-1.1.1-py3-none-any.whl (16.9 kB 查看哈希值)

上传时间 Python 3

支持者