2013-08-29 31 views
3

我正在尋找一種更優雅的方式來做到以下幾點:Python的ONELINE切換

py_loglevel = logging.DEBUG 
if self.loglevel == "INFO": 
    py_loglevel = logging.INFO 
elif self.loglevel == "WARNING": 
    py_loglevel = logging.WARNING 
elif self.loglevel == "ERROR": 
    py_loglevel = logging.ERROR 

這工作病程,但它在某種程度上讓我很煩,因爲它是塞滿我的代碼,甚至被吸引了我的注意,雖然它真是微不足道。 這可以在oneliner中完成嗎?

+1

Upvoted爲您傾力編寫優雅的代碼:) – thefourtheye

回答

9

使用字典:

levels = { 
    'INFO': logging.INFO, 
    'WARNING': logging.WARNING, 
    'ERROR': logging.ERROR, 
} 
py_loglevel = levels.get(self.loglevel, logging.DEBUG) 

另外,查找名稱作爲模塊上的屬性:

py_loglevel = getattr(logging, self.loglevel, logging.DEBUG) 

提供的名稱相匹配的模塊定義。

+0

啊,簡單...但是你從@user偷答案。 – RickyA

+0

@RickyA:不,我在編輯之後纔看到他的回答。 –

+0

@ Marijn Pieters:好的,你在哪裏第一個,因此你可以得到我的投票;)你是荷蘭人btw嗎? – RickyA

5
py_loglevel = getattr(logging, self.loglevel) 
+0

真的很高雅'如果名字匹配'。 – RickyA

1

看到this,一個糟糕的方式是:

py_loglevel = logging.DEBUG 
py_loglevel = (logging.INFO if self.loglevel == "INFO" else(logging.WARNING self.loglevel == "WARNING") else logging.ERROR) 
print ":D" 
+2

認爲,但確實太可怕了。 – RickyA