Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

E721: pycodestyle v2.11.0 does not raise the error to `int == type(obj)`

Abierto
#1,187 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
48/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Estancado
Stack tecnológico
python
Área
tooling

Línea de trabajo

Comienza en pycodestyle.py con COMPARE_TYPE_REGEX y comparison_type, y luego reproduce ambas formas de comparación usando los comandos mostrados en el issue. Ajusta el procesamiento para que int == type(obj) genere E721, mientras que el comportamiento existente de type(obj) == int siga siendo correcto, y verifica ambos casos con pycodestyle.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Environment
% python -V
Python 3.11.4
% pycodestyle --version
2.11.0

% pip list
Package     Version
----------- -------
pip         23.2.1
pycodestyle 2.11.0
setuptools  68.0.0
Normal behavior
% cat example.py
if type(obj) == int:
    pass
% pycodestyle example.py
example.py:1:4: E721 do not compare types, for exact checks use `is` / `is not`, for instance checks use `isinstance()`

Great!

Strange behavior

Change type(obj) == int to int == type(obj) (swap the left and right sides).

Expected

Raise E721.
This code is still comparing the return value of type.

Actual

Do NOT raise E721.

% cat example.py
if int == type(obj):
    pass
% pycodestyle example.py
% echo $?
0
Investigation
>>> from pycodestyle import comparison_type
>>> list(comparison_type("if type(obj) == int:", noqa=False))
[(3, 'E721 do not compare types, for exact checks use `is` / `is not`, for instance checks use `isinstance()`')]
>>> list(comparison_type("if int == type(obj):", noqa=False))
[]

In v2.11.0 (21abd9b6dcbfa38635bc85a2c2327ec11ad91ffc), COMPARE_TYPE_REGEX has 2 captures.
https://github.com/PyCQA/pycodestyle/blob/21abd9b6dcbfa38635bc85a2c2327ec11ad91ffc/pycodestyle.py#L128-L131

In comparison_type, the first captured substring is only referred (inst = match.group(1)).
https://github.com/PyCQA/pycodestyle/blob/21abd9b6dcbfa38635bc85a2c2327ec11ad91ffc/pycodestyle.py#L1451-L1452
https://github.com/PyCQA/pycodestyle/blob/21abd9b6dcbfa38635bc85a2c2327ec11ad91ffc/pycodestyle.py#L1461-L1470

>>> from pycodestyle import COMPARE_TYPE_REGEX
>>> from pycodestyle import SINGLETONS

>>> match = COMPARE_TYPE_REGEX.search("if type(obj) == int:")
>>> match
<re.Match object; span=(3, 15), match='type(obj) =='>
>>> match.group(1)  # None; Go yield (L1466)
>>> match.group(2)
'obj'

>>> match = COMPARE_TYPE_REGEX.search("if int == type(obj):")
>>> match
<re.Match object; span=(7, 19), match='== type(obj)'>
>>> match.group(1)
'obj'
>>> match.group(2)
>>> inst = match.group(1)
>>> inst and inst.isidentifier() and inst not in SINGLETONS  # Go return (L1465) not yield
True

If you need to use captured substrings, you might need to do something like inst = match.group(1) or match.group(2).
However, in that case, inst and inst.isidentifier() and inst not in SINGLETONS would return True, and E721 would no longer be raised.
Therefore, I believe that removing the return statement here would resolve the reported issue.

One concern I have is that it seems inst = match.group(1) has not been changed along with the last pull request.
https://github.com/PyCQA/pycodestyle/pull/1086/files
Depending on the reason for not changing this, we might need to consider a different solution.

Lenguaje dominante
Python
Estrellas
5.2k
Forks
754
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de PyCQA/pycodestyle

Todos los issues de PyCQA/pycodestyle

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.