2015-03-07 4 views
2

Я очищаю веб-страницу с помощью BeautifulSoup, а строка, где я ищу токен csrf, иногда вызывает TypeError.Обработка TypeError: «NoneType» в BeautifulSoup

Кодекс: вернулась

csrf = soup.find(id="csrfToken-postModuleForm")['value'] 

Ошибки:

TypeError: 'NoneType' object has no attribute '__getitem__' 

Ищет только продолжить со сценарием, если это значение не существует, вместо того, исключение брошенного - любая идея как это возможно?

+0

Просто используйте 'try'' except' blocks и поместите оператор 'pass' внутри блока except. Имейте в виду, он полностью перескочил бы с этим. – Zizouz212

+1

@ Zizouz212 'except: pass' - опасная конструкция, которая скрывает фундаментальные ошибки. Это плохое предложение вообще и тем более для неофитов. – msw

ответ

3

Что-то вроде этого

try: 
    # Try to get the CSRF token 
    csrf = soup.find(id="csrfToken-postModuleForm")['value'] 
except(TypeError, KeyError) as e: 
    # Token not found. Replace 'pass' with additional logic. 
    pass 

Здесь вы можете добавить любую дополнительную логику, такие как:

print("CSRF Not Found.") 

Убедитесь, что вы понимаете, как CSRF токены работы. Они важная часть веб-безопасности.

+1

Суп.find возвращает None, а не поиск, поэтому это снова вызовет ошибку, если значение не существует –

+0

Я не думаю, что вы действительно поняли мою точку зрения. что происходит, когда вы что-то находите, и у него нет атрибута значения? Вы понимаете, что делает '['value']'? –

+0

Я обновил свой ответ, чтобы включить catch для KeyError. Я не понял ваш комментарий без пунктуации. –

Смежные вопросы