python githooks flake8

python - Flake8 no reconoce la excepción incorporada



githooks (2)

Ejecutando python 2.7.8 me sale el siguiente:

except FileNotFoundError: NameError: name ''FileNotFoundError'' is not defined

Si cambio a OSError , funciona correctamente en python 3

except OSError:

FileNotFoundError es una subclase de OSError en python3

El uso de OSError detectará más que solo el error FileNotFound en python 3, por lo que es posible que desee agregar verificaciones adicionales.

Para python 2 es un IOError :

Puede detectar el error específico:

import __builtin__ exc = getattr(__builtin__,"IOError","FileNotFoundError") try: (open("bad_file")) except exc: pass

Claro que hay mejores maneras, pero para Python 3:

try: f = (open("bad_file")) except OSError as e: if isinstance(e, FileNotFoundError): pass else: raise e

Tengo un gancho de precompromiso estricto configurado con flake8, por lo que no puedo comprometerme hasta que esté satisfecho. Normalmente esto es bueno, pero está causando algunos problemas con lo que parece no ser ningún problema.

No puedo hacer que Flake8 reconozca un FileNotFoundError .

example.py

try: pass except FileNotFoundError: pass

Este es un código suficiente para que Flake8 genere el error.

$ flake8 example.py example.py:3:8: F821 undefined name ''FileNotFoundError'' $ python example.py # no error $ python3 example.py # no error

Revisé los documentos de Python , y FileNotFoundError es una excepción ''incorporada'', por lo que no creo que deba importarlo desde cualquier lugar, y mis intérpretes de Python no se han quejado, simplemente parece ser un problema con Flake8.


Encontré un par de menciones de este problema en el repositorio de herramientas de Calidad de Código Python . Específicamente el número 75 .

Dos soluciones fueron enumeradas. Puede usar el indicador --builtins para especificar una lista separada por comas de elementos incorporados conocidos que flake8 está marcando.

$ flake8 example.py example.py:3:8: F821 undefined name ''FileNotFoundError'' $ flake8 --builtins=FileNotFoundError,... example.py $

La otra solución es ejecutar flake8 en python3 en lugar de python2.

$ /usr/bin/python3.5 -m pyflakes example.py $

Con suerte, una de estas dos soluciones funcionará para usted, ya que torcer su código para solucionar una herramienta de verificación de sintaxis es contraproducente.