iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0
自我挑戰組

玩程式新手村 – C和Python系列 第 19

第19天 - Python 程式碼的靜態分析

  • 分享至 

  • xImage
  •  

第10天的文章 Python 登場 有談到 Pylint 和 Flake8 等延伸模組,今天要稍微深入討論 Python 程式碼的靜態分析。

甚麼是程式靜態分析?

  • 程式靜態分析(Program static analysis)是指在不執行程式碼情況下,檢查出潛在的語法錯誤,和檢查排版風格。使我們能夠在開發過程的早期發現並修復問題,並有助於提升軟體的品質與可靠性。

  • Python 常見的靜態分析工具 (也叫做 linter 或 lint) 有 Pylint 和 Flake8 等

  • 對於 Python .py 檔案,VS Code 有用 Pylance、 Pylint 和 Flake8 檢查程式碼,做靜態分析

    對於 Jupyter Notebook .ipynb 檔案,VS Code 只用 Pylance 檢查程式碼,沒有使用 Pylint 等檢查 。

靜態分析常遇到甚麼問題?

  • 未使用的變數或函數引數
    例如:Pylint 檢測到的 W0612: unused-variable 和 W0613: unused-argument

  • 錯誤的命名規則:變數、函式 (function)、類別 (class) 等的命名是否符合特定的規則
    例如: C0103: invalid-name, “doesn't conform to snake_case naming style”

  • 縮排、空格使用等問題。
    例如:
    Pylance 檢測到的 “Unexpected indentation”
    Pylint 檢測到的 E0001: syntax-error, “unexpected indent”
    Flake8 檢測到的 E999: “IndentationError: unexpected indent”

    Flake8 檢測到的 W291: “trailing whitespace”

  • 缺少兩個空行:最上層的函數或類別在上面要間格兩個空行
    例如:Flake8 檢測到的 E302: “expected 2 blank lines”

  • 類別或函式缺少 Docstrings
    例如:Pylint 檢測到的 C0116: “Missing function or method docstring”

  • 行長度超過限制:Flake8 會檢查單行程式碼的長度

如何避開顯示這些問題?

  • 可以更改 User 或 Workspace 的設定,可參考第3天的文章 「VS Code 的設定」。

    如果只針對某一 Workspace,可以在它 .vscode 資料夾內的 settings.json 加入以下Workspace設定。

    • 修改 Flake8 有關單行程式碼的長度限制
    • 儲存程式碼時,自動過濾行末多餘的空格
    {
    	"files.trimTrailingWhitespace": true, // 儲存的時候,會自動過濾行末多餘的空格
    
        "[markdown]": {
            "files.trimTrailingWhitespace": false  // markdown換行: 行末保留2個空格
        }
    
        "flake8.args": [
            "--max-line-length=100"   // 單行程式碼的最大長度
        ]
    }
    

注意事項:因為 lint 功能已經從 Python 延伸模組移出,所以網路較早期討論 linting 設定,例如 "python.linting.flake8Args" 都比較過時。

  • 在程式碼中暫時不顯示 Pylint 缺少 Docstrings 警告:
    • 在程式碼中插入一條註釋來禁用某些檢查或功能

      • 在程式碼的最前面增加一行註釋
      • 或在類別或函式 def 的行末增加註釋

      註釋可以是:
      # pylint: disable=missing-docstring

      也可以用(但不建議)
      # pylint: disable=C0111


上一篇
第18天 - GitHub CloudSpaces 說明
下一篇
第20天- C和 Python首場PK
系列文
玩程式新手村 – C和Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言