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 шт):
Для оператора if в случае если значение проверяется на True или False не требуется прописывать дополнительные конструкции, первый блок выполняется в случае True, второй в случае False. То есть код должен выглядеть следующим образом:
th = soup.find('div', id='uk')
if th:
print("True")
else:
print("False")
Условие 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...