我正在寻找一种更优雅的方式来执行以下操作:
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上完成吗?
答案 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"