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

问题描述 投票:-2回答:1

我正在寻找一个捷径:

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))

任何的想法?谢谢!

python python-3.x logging
1个回答
1
投票

如果你想要一些相对较短的东西,你可以使用:

myobj and myobj.name or ''

如果myobjmyobj.name是None(或其他假的),这将产生''。 否则它将产生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'))
© www.soinside.com 2019 - 2024. All rights reserved.