查看在SpeechBrain的原始碼的時候,看到了它的__init__.py裡面有一堆# noqa,於是就很好奇這到底是什麼意思

📝 摘要

Python裡面的 # noqa 是一種特殊的註解,它表示不要對這一行進行品質檢查。通常用於忽略[[PEP8]]規範的警告,比如:

  • 導入模塊但沒有使用
  • 行長超過限制
  • 其他等等。
    它是由一些代碼分析工具(如flake8或pycodestyle)支持的

這種忽略在某些情況下很有用,例如在你知道某行程式碼不會引起問題時,但靜態分析工具仍會將其視為問題的時候,就可以透過手動指定來排除。

🔍 定義

noqa(全稱NO Quality Assurance),意思是不要對這一行進行品質保證。

🌐 關聯概念

  • #noqa:No quality assurance
    • #noqa <error>:忽略特定類型的錯誤
  • #todo:待辦,通常會由IDE支持高亮
  • #type
  • # pylint: disable=xxx: 告訴 pylint 不要檢查指定的錯誤代
    • 例如 # pylint: disable=invalid-name 就是禁止檢查不符合命名規則的代碼
  • # flake8: noqa: 告訴 flake8 不要檢查整個檔案,通常用於忽略 E501(line too long) 或 E722(do not use bare except) 這些警告。

🌟 例子

import os

# This line will raise a warning because it is unused, but we know that
# and want to ignore the warning
os.environ["SOME_VAR"] = "some_value"  # noqa

在這個例子中,我們使用了 os.environ 設置一個環境變量,但因為沒有在後面的程式碼中使用它,所以會引起 linter 警告。但我們知道這個環境變量沒有被使用是正確的,因此可以使用 #noqa 註解來忽略警告。

🔗 參考資料