Вот простой пример, который вы можете применить к своему коду:
for item in ["Hello", "World", None, "Foo", None, "Bar"]:
print(item.upper())
Вывод:
HELLO
WORLD
Traceback (most recent call last):
AttributeError: 'NoneType' object has no attribute 'upper'
>>>
Как видите, когда for-l oop достигнет третьего Элемент в списке (который не является строкой, это объект NoneType
), возникает исключение, поскольку у объектов NoneType
нет метода upper
. Это работало в течение первых двух итераций, потому что у строк есть метод upper
.
Решение - используйте блок try-exc:
for item in ["Hello", "World", None, "Foo", None, "Bar"]:
try:
print(item.upper())
except AttributeError:
continue
Выход:
HELLO
WORLD
FOO
BAR
>>>
Мы инкапсулировали строку кода, которая может бросить потенциал AttributeError
с блоком try-exc. Если в строке кода возникает такое исключение, мы используем ключевое слово continue
, чтобы пропустить эту итерацию l oop и перейти к следующему элементу в списке.
Таким же образом вы может инкапсулировать эту строку:
tables_ticker = annual_report_page_soup.find(text="Age").find_parent("table")
С блоком try-exc. Однако вместо использования continue
внутри al oop вы можете переключать форматы очистки.