Python oneline开关

时间:2013-08-29 09:47:04

标签: python

我正在寻找一种更优雅的方式来执行以下操作:

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上完成吗?

3 个答案:

答案 0 :(得分: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)

提供的名称与模块上定义的名称相匹配。

答案 1 :(得分:5)

py_loglevel = getattr(logging, self.loglevel)

答案 2 :(得分: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"