¿Qué significa ‘# noqa’ en los comentarios de Python?

4 minutos de lectura

avatar de usuario
Ishpreet

Mientras buscaba en un proyecto de Python, encontré algunas líneas comentadas con # noqa.

import sys
sys.path.append(r'C:\dev')
import some_module   # noqa

Que hace noqa significa en Python? ¿Es específico solo para Python?

  • noqa lo más probable es que signifique no quality assurance. Le dice al software de análisis de código que ignore las advertencias.

    – Stevoisiak

    30 de enero de 2018 a las 17:23


  • Relacionado: ¿Cómo hago para que Pyflakes ignore una declaración?

    – Stevoisiak

    30 de enero de 2018 a las 17:24

  • En mi cabeza siempre se lee como “sin preguntas”

    – a través de

    26 de mayo de 2020 a las 18:24

avatar de usuario
Jimf

agregando # noqa a una línea indica que el linter (un programa que verifica automáticamente la calidad del código) no debe verificar esta línea. Cualquier advertencia que el código pueda haber generado será ignorada.

Esa línea puede tener algo que “se ve mal” para el linter, pero el desarrollador entiende y tiene la intención de que esté allí por alguna razón.

Para obtener más información, consulte el Documentación de Flake8 para seleccionar e ignorar infracciones.

  • para los linters de python, normalmente es esta declaración, pero para otros linters puede ser diferente, es decir, javascript con jshint es: // jshint ignore:line (jshint.com/docs)

    – Jimf

    28 de julio de 2017 a las 11:26


  • También funciona en PyCharm. forma abreviada genérica # noqa. O forma larga específica # noinspection PyUnresolvedReferences por ejemplo.

    –Bob Stein

    16/10/2017 a las 21:41

  • Tenga en cuenta que para pycodestyle/pep8 # nopep8 también se puede usar, que es un poco más claro, en mi opinión.

    – OozeMeister

    6 de marzo de 2019 a las 18:47

avatar de usuario
Vishvajit Pathak

noqa = NO-QA (SIN garantía de calidad)

Generalmente se usa en código Python para ignorar PEP8 advertencias

Líneas con #noqa al final será ignorado por los programas linter y no generará ninguna advertencia.

¿Sabes que? Incluso Guido van Rossum (el creador de Python) hizo esta pregunta antes 😀

Un poquito Etimología de # noqa:

Solía ​​ser “nopep8”, pero cuando Flake8 y Pep8 querían un calificador común, @florentx sugirió “NoQA” como “Sin garantía de calidad” (iirc) y se mantuvo.

algo basico usos de # noqa (con escama8):

  • # flake8: noqa: archivos que contienen esta línea se omiten
  • líneas que contienen un # noqa comentario al final: no emitirá advertencias
  • # noqa: <error>p.ej, # noqa: E234 al final: pasar por alto errores específicos en una línea
    • se pueden dar múltiples códigos de error, separados por comas
    • los dos puntos antes de la lista de códigos son obligatorios

  • esta es definitivamente la mejor respuesta! académico, histórico, práctico, simple.

    – d34n5

    19 de noviembre de 2020 a las 2:18

  • @ d34n5 ¡este es definitivamente el mejor comentario! comprensiva, lírica, monolexémica, sencilla.

    –Bob Stein

    28 de agosto de 2021 a las 14:56

avatar de usuario
AlfazOeste

Vine aquí después de encontrar una directiva # noqa en una biblioteca con la que estaba trabajando. Como nunca había oído hablar de él, naturalmente llegué aquí después de buscar en Google. Las respuestas proporcionadas aquí son adecuadas, pero quería brindar una mayor elaboración para aquellos que puedan tener curiosidad (ciertamente lo estaba)

  • # noqa ha evolucionado desde el # nopep8 sintaxis utilizada en versiones anteriores de flake8

  • # noqa es compatible con IDE, como PyCharm, para usar con sus herramientas de inspección de código integradas.

  • # noqa se puede usar como una directiva previa a la confirmación, de modo que antes de las nuevas confirmaciones se debe completar un proceso de inspección

  • # noqa se puede usar para ignorar todas las advertencias o se pueden dar advertencias específicas para ignorar. Por ejemplo, # noqa: F401 ignorará una advertencia de módulo importado no utilizado.

Como ejemplo, considere el siguiente código:

import os

print("Hello, world!")

Este código importa el os módulo pero no lo usa. Si uno quisiera usar el # noqa herramienta para suprimir una advertencia de PEP8, podría escribirse así:

import os  # noqa

print("Hello, world!")

esto ignorará todos advertencias Sin embargo, si solo quisiera ignorar una advertencia específica (PEP8 F401 importado pero no utilizado), podría hacerse así:

import os  # noqa: F401

print("Hello, world!")

He publicado un artículo con algunos ejemplos de noqa y más elaboración sobre los puntos anteriores.

¿Ha sido útil esta solución?