iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
自我挑戰組

Python資料分析學習地圖系列 第 14

Day 14 : 程式碼日誌與品質

今天來探討怎麼留下程式碼紀錄和提升自己的程式碼品質。(終於快寫到一半了XDDD)/images/emoticon/emoticon69.gif

程式碼日誌

程式設計難免會有錯誤,為了要方便除錯和查詢,良好的程式設計應留下程式碼日誌軌跡,以利日後查詢紀錄執行。我們會引用 logging 套件,而 logging 共分 5 個等級。

Level Illustration
DEBUG 紀錄開發時候的日誌內容,上線後可以關閉顯示
INFO 紀錄正常情況下的內容
WARNING 紀錄雖然發生不會影響程式執行,但有警示意味
ERROR 紀錄程式執行時發生的錯誤內容
CRITICAL 紀錄最嚴重的錯誤內容

1. 基本介紹

可以在開發的時候調整為 DEBUG;上線後就調整為 ERROR。

import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug('紀錄開發時候的日誌內容')
logging.info('紀錄正常情況下的內容')
logging.warning('紀錄雖然發生不會影響程式執行,但有警示意味')
logging.error('紀錄程式執行時發生的錯誤內容')
logging.critical('紀錄最嚴重的錯誤內容')

import logging
logging.basicConfig(level=logging.ERROR)
logging.debug('紀錄開發時候的日誌內容')
logging.info('紀錄正常情況下的內容')
logging.warning('紀錄雖然發生不會影響程式執行,但有警示意味')
logging.error('紀錄程式執行時發生的錯誤內容')
logging.critical('紀錄最嚴重的錯誤內容')

2.FORMAT

通常會希望紀錄什麼時間點發生、等級、檔案名稱、第幾行錯

import logging
logging.basicConfig(level=logging.ERROR, 
                    format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
logging.debug('紀錄開發時候的日誌內容')
logging.info('紀錄正常情況下的內容')
logging.warning('紀錄雖然發生不會影響程式執行,但有警示意味')
logging.error('紀錄程式執行時發生的錯誤內容')
logging.critical('紀錄最嚴重的錯誤內容')

3.輸出到檔案

import logging
logging.basicConfig(level=logging.ERROR, 
                    format='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s',
                    filename='test.log')
logging.debug('紀錄開發時候的日誌內容')
logging.info('紀錄正常情況下的內容')
logging.warning('紀錄雖然發生不會影響程式執行,但有警示意味')
logging.error('紀錄程式執行時發生的錯誤內容')
logging.critical('紀錄最嚴重的錯誤內容')

程式碼品質

為提高大家的程式碼品質,我們特別提到這個章節,希望大家會學到:

  • 提高你的程式碼易讀性
  • 容易維護
  • 減少技術債
  • 程式碼會朝向 pythonic ,比較優雅

1. PEP

Python Enhancement Proposals,規範與定義 Python 的技術規格,讓開發社群有共同遵循的標準。由於規範很多,大家可以直接點下面連結參考,本篇著重於套件展示。

https://www.python.org/dev/peps/

2. PEP-8 優點

    1. 一致性: 程式碼具備一樣的格式,讓閱讀的人可以輕鬆許多。
    1. 程式品質: 閱讀結構化的程式碼,可以更快找到 bug 的地方。

3. 好用套件

autopep8

autopep8 是一個開源的命令行工具,它能夠將 Python 代碼自動格式化為 PEP8 風格。autopep8 使用 pycodestyle 工具來確定代碼中哪一部分需要被格式化,修復這部分問題的 pycodestyle 工具版。 autopep8 製造也是一個 Python 語言寫寫的工具,因此,我們可以直接使用 pip 進行:

pip install autopep8

原本的程式碼

import os, sys  
 
def main():  
    print [item for item in os.listdir('.') if item.endswith('.py')];  
    print (sys.version)  
 
if __name__ == '__main__':  
    main()

更改後

autopep8 test01.py

如果沒有 --in-place,則不會覆蓋檔案

flake8

Flake8是由Python官方發布的輔助檢測Python代碼是否規範的工具,相對於當前熱比較高的Pylint,Flake8檢查規則靈活,支持集成額外插件,擴展性強。

pip install autopep8

實際使用看看

pylint

為您的程式碼品質打上分數!!
pylint是一個Python代碼風格的檢查工具, 它依據的標準是 PEP8。

pip install pylint

實際使用看看

接著照著 pylint 給的建議,就可以改高分一點(改程式樸實無華的樂趣)


上一篇
Day 13 : 程式除錯與異常
下一篇
Day 15 : 機器學習介紹
系列文
Python資料分析學習地圖30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言