Используя BeautifulSoup, как защититься от не найденных элементов? - PullRequest
1 голос
/ 31 июля 2010

Я перебираю строки таблицы в таблице, но первые 1 или 2 строки не содержат искомых элементов (они предназначены для заголовков столбцов таблицы и т. Д.).

Итак, после 3-й строки таблицы, в ячейках таблицы (td) есть элементы, которые имеют то, что я ищу.

, например

td[0].a.img['src']

Но вызвать это не удалось, так как первые несколько строк не имеют этого.

How can I guard against these cases so my script doesn't fail?

Я получаю сообщения об ошибках типа:

nonetype object is unsubscriptable

Ответы [ 2 ]

5 голосов
/ 31 июля 2010

Самый простой и понятный, если вы хотите, чтобы ваш код был "в строке":

theimage = td[0].a.img
if theimage is not None:
   use(theimage['src'])

Или, желательно, оберните чек None в свою крошечную функцию, например:

def getsrc(image):
  return None if image is None else image['src']

и использовать getsrc(td[0].a.img).

1 голос
/ 31 июля 2010

Начиная с tr:

for td in tr.findChildren('td'):
    img = td.findChild('img')
    if img:
        src = img.get('src', '')  # return a blank string if there's no src attribute
        if src:
            # do something with src
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...