Python, цикл if в зависимости от значения False или True

Делаю парсер. В зависимости от того, есть часть html кода на странице с блоком div у которого id="uk" или нет, мне нужно прописать действия. Пробовал различные конструкции c циклом while и if и не могу понять в чём ошибка?

Есть код:

th = soup.find('div', id='uk')
print(bool(transcription_html))

Значение переменной th = True Пробую написать цикл:

th = soup.find('div', id='uk')
if th is True:
    print("True")
else:
    print("False")

Получаю вывод "False". Пробовал конструкцию if th == True, но результат тоже, получаю вывод "false". Читал, что желательно использовать is а не ==, когда проверка идёт через True или False.


Ответы (2 шт):

Автор решения: zRoger

Для оператора if в случае если значение проверяется на True или False не требуется прописывать дополнительные конструкции, первый блок выполняется в случае True, второй в случае False. То есть код должен выглядеть следующим образом:

th = soup.find('div', id='uk')
if th:
    print("True")
else:
    print("False")
→ Ссылка
Автор решения: Jack_oS

Условие if th is True (так же, как и if th == True) в этом коде никогда не выполниться, так как:

  • в python ключевое слово is используется для проверки того, ссылаются ли обе переменные на один и тот же объект;

  • метод .find() библиотеки bs4 возвращает или объект класса <class 'bs4.element.Tag'>, или, если ничего не найдено, <class 'NoneType'> (в отличии от .find_all(), который возвращает или список элементов или пустой список, а не None).

Условие if th будет выполняться, если th имеет хоть какое-то "непустое" значение: не булевое False, не None, не пустой список (строка, сет) [], '', {} или не 0, т.е. условие:

if th:
    print("True")

выполняется (возвращает True), в данном случае, если th - не None, а не True...

→ Ссылка