python pyflakes

python - ¿Cómo hago para que Pyflakes ignore una declaración?



flake8 (7)

Aquí hay un parche de mono para pyflakes que agrega una opción de comentario # bypass_pylakes .

#!/usr/bin/env python from pyflakes.scripts import pyflakes from pyflakes.checker import Checker def report_with_bypass(self, messageClass, *args, **kwargs): text_lineno = args[0] - 1 with open(self.filename, ''r'') as code: if code.readlines()[text_lineno].find(''bypass_pyflakes'') >= 0: return self.messages.append(messageClass(self.filename, *args, **kwargs)) # monkey patch checker to support bypass Checker.report = report_with_bypass pyflakes.main()

Si guarda esto como bypass_pyflakes.py , puede invocarlo como python bypass_pyflakes.py myfile.py .

http://chase-seibert.github.com/blog/2013/01/11/bypass_pyflakes.html

Muchos de nuestros módulos comienzan con:

try: import json except ImportError: from django.utils import simplejson as json # Python 2.4 fallback.

... y es la única advertencia de Pyflakes en todo el archivo:

foo/bar.py:14: redefinition of unused ''json'' from line 12

¿Cómo puedo hacer que Pyflakes ignore esto?

(Normalmente iría a leer los documentos pero el enlace está roto. Si nadie tiene una respuesta, solo leeré la fuente).


Creé un pequeño guión de shell con algo de magia awk para ayudarme. Con esto, se excluyen todas las líneas con import typing , from typing import o #$ (este último es un comentario especial que estoy usando aquí) ( $1 es el nombre de archivo de la secuencia de comandos de Python):

result=$(pyflakes -- "$1" 2>&1) # check whether there is any output if [ "$result" ]; then # lines to exclude excl=$(awk ''BEGIN { ORS="" } /(#/$)|(import +typing)|(from +typing +import )/ { print sep NR; sep="|" }'' "$1") # exclude lines if there are any (otherwise we get invalid regex) [ "$excl" ] && result=$(awk "! /^[^:]+:(${excl}):/" <<< "$result") fi # now echo "$result" or such ...

Básicamente, toma nota de los números de línea y crea dinámicamente una expresión regular de ella.


Para citar del github.com/kevinw/pyflakes/issues/13 :

Si bien la solución aún está por venir, así es como se puede solucionar, si te estás preguntando:

try: from unittest.runner import _WritelnDecorator _WritelnDecorator; # workaround for pyflakes issue #13 except ImportError: from unittest import _WritelnDecorator

Substituye _unittest y _WritelnDecorator con las entidades (módulos, funciones, clases) que necesita

- deemoowoor


Sé que esto fue cuestionado hace un tiempo y ya está respondido.

Pero quería agregar lo que suelo usar:

try: import json assert json # silence pyflakes except ImportError: from django.utils import simplejson as json # Python 2.4 fallback.


Sí, desafortunadamente dimod.org está abajo junto con todas las cosas buenas.

Al mirar el código de pyflakes, me parece que Pyflakes está diseñado para que sea fácil de usar como un "comprobador rápido integrado".

Para implementar la funcionalidad de ignorar, deberá escribir el suyo propio que llame al verificador de pyflakes.

Aquí puedes encontrar una idea: http://djangosnippets.org/snippets/1762/

Tenga en cuenta que el fragmento anterior solo para los comentarios se coloca en la misma línea. Para ignorar un bloque completo, es posible que desee agregar ''pyflakes: ignore'' en el bloque docstring y filter basado en node.doc.

¡Buena suerte!

Estoy usando la pelusa de bolsillo para todo tipo de análisis de código estático. Estos son los cambios realizados en la pelusa de bolsillo para ignorar pyflakes: https://code.launchpad.net/~adiroiban/pocket-lint/907742/+merge/102882


Si puede usar flake8 en flake8 lugar, que envuelve pyflakes y pep8 checker, una línea que termina en

# NOQA

(en el cual el espacio es significativo - 2 espacios entre el final del código y el # , uno entre él y el texto de NOQA ) le indicará al inspector que ignore cualquier error en esa línea.


También puedes importar con __import__ . No es pitónico, pero Pyflakes ya no te lo advierte. Ver documentación para __import__ .

try: import json except ImportError: __import__(''django.utils'', globals(), locals(), [''json''], -1)