Python:即使myobj或myobj.myprop为None,也要记录myobj.myprop?

时间:2019-04-18 14:25:31

标签: python python-3.x logging

我正在寻找快捷方式

name = ''
if myobj not None and myobj.name not None:
  name = myobj.name

date = ''
if myobj not None and myobj.date not None:
  date = myobj.date

logging.info('Something happened with %s at %s', name, date)

类似类似的事物:

logging.info('Something happened with %s at %s', none_as_empty_str(myobj.name), none_as_empty_str(myobj.date))

有什么主意吗?谢谢!

1 个答案:

答案 0 :(得分:1)

如果您想要较短的内容,可以使用:

myobj and myobj.name or ''

如果myobjmyobj.name为None(否则为false),将产生''
否则将产生myobj.name

或者,只要您将访问属性推迟到函数内部或间接访问,您的none_as_empty_str函数就可以使用。这样,如果myobj为None,则可以获取空字符串而不是异常:

def none_as_empty_str(obj, attr):
    return getattr(obj, attr, None) or ''

logging.info('Something happened with %s at %s',
             none_as_empty_str(myobj, 'name'),
             none_as_empty_str(myobj, 'date'))