3

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

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

4

3 回答 3

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)

只要名称与模块上定义的名称匹配。

于 2013-08-29T09:48:05.073 回答
5
py_loglevel = getattr(logging, self.loglevel)
于 2013-08-29T09:48:48.643 回答
1

看到这个,一个不好的方法是:

py_loglevel = logging.DEBUG
py_loglevel = (logging.INFO if self.loglevel == "INFO" else(logging.WARNING self.loglevel == "WARNING") else logging.ERROR)
print ":D"
于 2013-08-29T09:54:27.380 回答