Python: регистрировать myobj.myprop, даже если myobj или myobj.myprop не равны None? - PullRequest
0 голосов
/ 18 апреля 2019

Я ищу ярлык для:

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 Ответ

1 голос
/ 18 апреля 2019

Если вы хотите что-то относительно короткое, вы можете использовать:

myobj and myobj.name or ''

Если myobj или myobj.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'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...