Есть ли оператор `?.` в Python?

Groovy имеет очень удобный оператор ?., Это проверяет, если объект не null и, если это не так, обращается к методу или свойству. Могу ли я сделать то же самое в Python?

Самый близкий мне троичный условный оператор. Сейчас занимаюсь

l = u.find('loc')
l = l.string if l else None

тогда как было бы неплохо написать

l = u.find('loc')?.string

Обновление: в дополнение к getattr упомянутый ниже, я нашел относительно хороший способ сделать это с помощью списка:

[x.string if x else None for x in [u.find('loc'), u.find('priority'), ...]]

Другая альтернатива, если вы хотите исключить None:

[x.string for x in [u.find('loc'), u.find('priority'), ...] if x]

1 ответ

Решение

Вы могли бы написать что-то вроде этого

L = L and L.string

Важно отметить, что, как и в вашем троичном примере, это сделает "else" для любого значения "Falsy" L

Если вам нужно проверить специально для None, яснее написать

if L is not None:
    L = L.string

или для любой версии "Falsy"

if L:
    L = L.string

Я думаю, используя getattr это немного неловко для этого тоже

L = getattr(L, 'string', None)
Другие вопросы по тегам