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

これはもちろん機能しますが、コードが雑然としていて、本当に些細なことであるにもかかわらず、私の注意を引き付けているため、どういうわけか私を悩ませています。これはワンライナーで行うことができますか?

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 に答える