Как можно улучшить данное в примере условие?
Есть такое условие в коде:
if 'pdf_path' in item['item'] and item['item']['pdf_path'] is not None and "storage/om" in item['item']['pdf_path']:
По мне, выглядит ужасно, можете, плз, подсказать, как можно было бы улучшить данное условие (и возможно ли это?)
Ответы (3 шт):
Если item['item']['pdf_path'] содержит в себе только одно значение, то тогда, если item['item']['pdf_path'] хранит в себе "storage/om", проверка на None выполняется неявно. В этом случае условие преобразуется в:
if 'pdf_path' in item['item'] and "storage/om" in item['item']['pdf_path']:
Вы можете использовать временную переменную и словарный метод get. Тогда не понадобится дополнительное and
temp = item['item'].get('pdf_path')
if not temp:
temp = ()
if "storage/om" in temp:
PS: не очень люблю длинные условия, лучше их тем или иным образом делать разделенными или обходиться любыми другими способами. Ну это, как я считаю дело вкуса. Если требуется все же одно условие, то вот мой намудренный вариант:
if "storage/om" in (temp if (temp := item['item'].get('pdf_path')) else ()):
Можно через try/except сделать, убрав все промежуточные проверки:
try:
if "storage/om" in item['item']['pdf_path']:
print('Есть!')
except:
pass
В случае, когда путь до нужного элемента довольно длинный, это может быть неплохим вариантом.