2011-05-02 58 views
0

我已經在log.py中編寫了這段代碼。現在此代碼是否遵循Python編碼標準樣式和成語?

import logging 
import os 


# make directory 
directory = 'logs' 
if not os.path.exists(directory): 
    os.makedirs(directory) 

# create logger 
logger = logging.getLogger('testfile') 
logger.setLevel(logging.DEBUG) 


loghandler = logging.FileHandler(directory + '\log.txt') 

# create formatter 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 

# add formatter to loghandler 
loghandler.setFormatter(formatter) 

# add loghandler to logger 
logger.addHandler(loghandler) 

,用戶可以在任何模塊中使用這個像

import log 
log.logger.warn("gjh") 

回答

3

你創建一個全局對象一個整體模塊。如果你想節省代碼,只需創建它的函數:

def make_logger(): 
    logger = logging.getLogger('testfile') 
    # initializations... 
    # ... 
    return logger 

logger = make_logger() 
logger.warn('ghj') 

隨着關鍵字參數和默認值,你也可以輕鬆地定製它的創作,如果這種需要時(很可能會出現爲你的程序變得更復雜)。

+0

但是,每次我從不同的模塊調用make_logger()時它不會創建一個新對象嗎?這不重要嗎? – ruskin 2011-05-02 07:06:50

+1

@ruskin:所以使用一個對象並傳遞給它一個引用。我仍然不會爲日誌記錄對象創建一個模塊。某些頂級對象/模塊必須創建記錄器,因此它可以「擁有」它並傳遞給其他需要它的模塊 – 2011-05-02 07:18:23

+0

yes,true!謝謝 – ruskin 2011-05-02 07:19:26

1

關於編碼風格我建議使用專用工具。以前有過一些帖子,例如:PyLint, PyChecker or PyFlakes?

我個人更喜歡使用pylint,它的配置文件適用於我希望在我的項目中使用的某些內容(例如特殊變量名稱)。如果您想快速瀏覽一下,請嘗試pep8

最好的問候,賴

2

我看到一對夫婦的問題

  1. 顯然,你正在使用兩個空格縮進,這is a crime in Python
  2. 您正在使用'\log.txt'的作品僅僅因爲一個小寫的L沒有作爲控制角色的特殊含義。更好地使用特定於操作系統的路徑構造函數(請參閱os.path.join
相關問題