Importa fallas en VScode para pylint al importar pygame

Cuando la importación de pygame pylint se está volviendo loca:

E1101:Module 'pygame' has no 'init' member E1101:Module 'pygame' has no 'QUIT' member 

He buscado en la red y he encontrado esto:

 "python.linting.pylintArgs": ["--ignored-modules=pygame"] 

Resuelve el problema con pygame, pero ahora pylint se está volviendo loco de otra manera: crazy_pylint.png . Luego encontré "python.linting.pylintArgs": ["--ignored-files=pygame"] , pero lo que hace es deshabilitar completamente pylint para todo el directorio en el que estoy trabajando. Entonces, ¿cómo digo pylint que todo está Ok con pygame?

Para E1101 : el problema es que la mayoría de Pygame se implementa en C directamente. Ahora, todo esto está bien y es excelente en términos de rendimiento, sin embargo, pylint (la plantilla utilizada por VSCode) no puede escanear estos archivos en C. Desafortunadamente, estos mismos archivos definen un montón de cosas útiles, como QUIT y otras constantes, como MOUSEBUTTONDOWN , K_SPACE , etc., así como funciones como init o quit .

Para solucionar esto, primero lo primero, deja de ignorar el módulo de pygame eliminando todos tus argumentos en "python.linting.pylintArgs" . Confía en mí, la máscara puede ser útil.

Ahora para solucionar los problemas. Para sus constantes (cualquier cosa en mayúsculas), impórtelas manualmente así:

 from pygame.constants import ( MOUSEBUTTONDOWN, QUIT, MOUSEMOTION, KEYDOWN ) 

Ahora puedes usarlos sin pygame. a pygame. :

 for event in pygame.event.get(): if event.type == QUIT: pygame.quit() if event.type == KEYDOWN: # Code 

A continuación, para sus errores de init y otras funciones, puede ayudar manualmente a la impresora a resolver estos, a través de 2 métodos:

  • Agregue esto en algún lugar de su código: # pylint: disable=no-member . Esto desactivará la validación de miembros para todo el archivo, evitando que se muestren tales errores.
  • O puede encerrar la línea con el error:

    # pylint: disable=no-member
    pygame.quit()
    # pylint: enable=no-member

Esto es similar a lo que hace el primer método, sin embargo, limita el efecto solo a esa línea.

Finalmente, para todas sus otras advertencias, la solución es arreglarlas . Pylint está ahí para mostrarle los lugares donde su código no tiene sentido o no cumple con las especificaciones de Python. Un vistazo rápido a su captura de pantalla muestra, por ejemplo, que su módulo no tiene una cadena de documentación, que ha declarado variables no utilizadas … Pylint está aquí para ayudarlo a escribir un código conciso, claro y hermoso. Puede ignorar estas advertencias u ocultarlas (con # pylint: disable= y estos códigos ) o pasar un poco de tiempo limpiando todo.

A la larga, esta es la mejor solución, ya que hará que su código sea más legible y, por lo tanto, mantenible, y más agradable de ver.

OP. También puede mantener la corrección pygame de pylint que encontró en vscode incluyendo los argumentos predeterminados de vscode usted mismo. La linter se está volviendo loca (crazy_pylint.png) porque estabas obstruyendo los argumentos pylint predeterminados con tu propio python.linting.pylintArgs personalizado. La corrección de ignorar del módulo de pygame funciona, y el cursor puede volver al modo no loco al incluir también los argumentos predeterminados incluidos en su propio python.linting.pylintArgs personalizado.

De los documentos:

Estos argumentos se pasan siempre que python.linting.pylintUseMinimalCheckers se establece en true (el valor predeterminado). Si especifica un valor en pylintArgs o utiliza un archivo de configuración de Pylint (consulte la siguiente sección), pylintUseMinimalCheckers se establece implícitamente en falso.

Los vscode predeterminados pasan de acuerdo con esto: https://code.visualstudio.com/docs/python/linting son:

  --disable=all, --enable=F,E,unreachable,duplicate-key,unnecessary-semicolon,global-variable-not-assigned,unused-variable,binary-op-exception,bad-format-string,anomalous-backslash-in-string,bad-open-mode 

Por lo tanto, aquí está cómo pasar todos esos valores predeterminados, así como el --ignored-modules=pygame en la configuración del usuario dentro de vscode:

  "python.linting.pylintArgs": [ "--disable=all", "--enable=F,E,unreachable,duplicate-key,unnecessary-semicolon,global-variable-not-assigned,unused-variable,binary-op-exception,bad-format-string,anomalous-backslash-in-string,bad-open-mode", "--ignored-modules=pygame" ] 

Per @ C._ comenta arriba, definitivamente está hablando verdad; ¡La linter ayudará!

Estoy escribiendo mejor código con él habilitado seguro.

Además, descubrí que puede ajustar aún más su pylinter con los “mensajes de pylint legibles” delimitados por comas y líneas enumerados aquí: https://github.com/janjur/readable-pylint-messages/blob/master/README. Maryland

Entonces, para no ignorar también las nuevas líneas finales, debe agregar el argumento enable= list para incluir simplemente trailing-newlines .

Realmente espero que esto te ayude OP 🙂 Me ayudó!

Gracias por hacer la pregunta y compartir --ignored-modules .