當前位置:
首頁 > 知識 > 用於Python項目的最佳flake8擴展

用於Python項目的最佳flake8擴展

用於Python項目的最佳flake8擴展

正如我們所看到的,Flake8是幾個工具的包裝器,並且可以通過插件進行擴展:這意味著你可以添加自己的檢查。我是Flake8的忠實用戶,依賴一些插件來擴展Python中常見編程錯誤的檢查範圍。以下是我工作所必須的一些插件清單。作為獎勵,你會在本文的末尾找到一個我的首選 tox.ini文件實例。

flake8-import-order

名稱非常清楚:此擴展檢查文件開頭import語句的順序。默認情況下,它使用了我喜歡的樣式,看起來像:

用於Python項目的最佳flake8擴展

內建模塊被分為第一個組。緊接著每一個被引入的第三方模塊作為一個分組。最後一個分組管理當前項目的模塊。我發現這種組織模塊引入的方式非常清晰易讀。

為了確保flake8-import-order知道你項目模塊的名稱,你需要在tox.ini文件中以application-import-names的選項形式定義它。

如果你想嘗試不同的樣式,你可以通過設置import-order-style選項來使用flake8-import-order默認提供的其他樣式。顯然,你也可以提供自己的樣式。

flake8-blind-except

flake8-blind-except擴展用來檢查在沒有定義異常類型的情況下不使用except語句。因此,下列摘錄的語句被認為是無效的:

用於Python項目的最佳flake8擴展

使用except而不指定任何異常類型的做法是不好的,因為它可能捕獲不需要的異常。它迫使開發人員考慮什麼類型的錯誤可能產生,並且應該被真正捕獲。

在極少的情況下,任何異常才都需要被捕獲,不管怎樣,使用except Exception仍然是可以的。

flake8-builtins

flake8-builtins插件檢查你的代碼和Python內建變數之間沒有名稱衝突。

例如,這段代碼會觸發一個錯誤:

用於Python項目的最佳flake8擴展

由於list是Python中的一個內建函數(用於創建一個列表!),在函數簽名中使用list作為參數名來隱藏它的定義會觸發來自flake8-builtins的警告。

雖然代碼是有效的,但是重寫Python內置函數是一個壞習慣。它可能會導致一些棘手的錯誤;在上面的例子中,如果你需要調用list,那你將無法調用它。

flake8-logging-format

這個模塊很方便,因為它仍然不時敲打我的手指。當使用logging模塊時,它會阻止編寫這類代碼:

用於Python項目的最佳flake8擴展

雖然這是可行的,但它是次優的,因為它強制進行字元串插入。如果日誌記錄器被配置為只列印警告級別或更高級別的日誌信息,那麼在這裡進行字元串插入是沒有意義的。

因此,我們應該這樣寫:

用於Python項目的最佳flake8擴展

如果你使用format模塊來進行任何格式化,情況也是如此。

請注意,與其他flake8模塊相反,這個模塊在默認情況下不啟用檢查。你需要在你的tox.ini文件中添加enable-extensions=G來啟用它。

flake8-docstrings

flake8-docstrings模塊檢查你的Python文檔注釋內容是否符合PEP 257。這個PEP包含了關於正確格式化文檔注釋的小細節,如果沒有這樣的工具,你將無法做到這一點。一個簡單的例子是:

用於Python項目的最佳flake8擴展

雖然這段代碼看起來是有效的,但是在文檔注釋的末尾有一個缺失的地方。

相信我,特別是如果你正在編寫一個被其他開發人員使用的庫,那麼這是一個必須擁有的擴展模塊。

flake8-rst-docstrings

這個擴展是對flake8-docstrings的一個很好的補充:它檢查你的文檔注釋內容是否有效。這很簡單,所以我毫不猶豫地安裝了它。同樣,如果你的項目導出了使用Sphinx構建的文檔化API,那麼這個擴展是必須具備的。

我的標準tox.ini文件

這是一個我在我的大多數項目中使用的標準的tox.ini摘錄。你可以複製粘貼並使用它。

用於Python項目的最佳flake8擴展

在為你的整個項目禁用錯誤代碼之前,請記住,你可以通過在行尾添加# noqa標記來強制flake8忽略特定的錯誤實例。

如果你有任何你認為有用的flake8擴展,請在評論區告訴我!

用於Python項目的最佳flake8擴展


英文原文:https://julien.danjou.info/the-best-flake8-extensions/
譯者:浣熊君( ????? )

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python部落 的精彩文章:

Python3.7新特性:Data Class
導致Python之父不幹了的PEP 572討論

TAG:Python部落 |