Есть ли оператор `?.` в 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)