2012-05-18 4 views
5

con el siguiente código:pylint se queja de py.test: " 'PYtest' Módulo tiene ningún miembro 'subidas'"

import pytest 
def test_a(): 
    with pytest.raises(Exception): 
     1/0 

Si me quedo pylint en ella, se hará una quejarse de que "plantea" no es miembro del módulo pytest:

E: 3,9:test_a: Module 'pytest' has no 'raises' member 

Lo que obviamente no es cierto. ¿Alguna idea de por qué la pildora está cometiendo un error así? ¿Es esto un error conocido?

versión py.test:

> py.test --version 
This is py.test version 2.2.3, imported from C:\Python27\lib\site-packages\pytest.pyc 

versión pylint:

> pylint --version 
No config file found, using default configuration 
pylint 0.25.1, 
astng 0.23.1, common 0.57.1 
Python 2.7.2 (default, Jun 24 2011, 12:22:14) [MSC v.1500 64 bit (AMD64)] 
+0

Sería útil si se pudiera proporcionar la versión de pylint que está usando (salida del --version pylint), así como la versión de py.test. –

+0

@gurneyalex Hola Gurney, he actualizado la pregunta original para incluir la información de la versión. Gracias. – KFL

Respuesta

3

última vez que miré pylib hace algo pesada dinámica en la materia bajo nivel pitón, como volver a definir por completo el código de importación. Es muy probable que esto desconcierte por completo a pylint/astng y le impida obtener lo que está dentro del módulo pytest: pylint/astng no importa el código que analiza, lo analiza, lo que significa que lo que se inicializa dinámicamente en el momento de la importación por lo general pasan desapercibidos, lo que a su vez genera falsos positivos como el que usted informa.

A partir de ahí, se enfrenta a las siguientes opciones:

  • uso unittest otro marco, menos dinámico que py.test
  • silencio las advertencias/errores en su código de prueba manualmente
  • utilizan otro borra de la cual es más feliz que pylint en py.test (me interesa saber cómo funcionan pychecker/pyflakes en ese código)
  • escribo el complemento astng que ayudará a astng a resolver los trucos de pylib y enviarlo como un parche a los mantenedores astng (y obtener crédito extra de eso)
+3

Hola Alex. Pytest ya no usa la lógica de importación dinámica "pylib", desde hace un par de años, la versión 2.0 en realidad. Sin embargo, los complementos pueden agregarse al espacio de nombres "pytest" que está sucediendo realmente para "pytest.raises". – hpk42

+0

Gracias por la precisión @ hpk42. Sin embargo, agregar dinámicamente al espacio de nombres pytest es una desventaja del análisis estático de pylint, por lo que las conclusiones de mi respuesta anterior aún se mantienen. –

+0

¿Hay alguna manera de que pytest pueda informar a pylint sobre su espacio de nombres? – hpk42

3

Se puede silenciar esto en un archivo con pylintrc: ignored-classes=pytest

+0

Esta respuesta habría obtenido mi voto positivo, pero omitió alguna información que me hubiera gustado ver. La sección correcta para la opción: 'ignored-classes = pytest' debe colocarse bajo' [TYPECHECK] 'en un archivo pylintrc.Además, un archivo pylintrc se puede colocar en algunas ubicaciones diferentes, como se ejemplifica en esta publicación: http://stackoverflow.com/a/16273555/955014 – imolit

Cuestiones relacionadas