Не каждый тег имеет атрибут style
.Для тегов, которые этого не делают, вы пытаетесь получить доступ к несуществующему ключу в словаре attrs
.Python отвечает: KeyError
.
. Если вместо этого вы используете get()
, он будет возвращать значение по умолчанию, а не поднимать KeyError
.Вы можете указать значение по умолчанию в качестве второго аргумента для get()
:
return { k.strip() : v.strip() for k, v in
[ x.split(': ') for x in el.attrs.get('style', '').split(';') ]
}
Здесь я выбрал пустую строку в качестве значения по умолчанию.
Только с этим изменением ваш код по-прежнемуостается несколько ломким.Что если ввод не совсем соответствует ожидаемому?
С одной стороны, после двоеточия может не быть пробела.Изменение split(': ')
на split(':')
заставит его работать, даже если пробела нет - если он есть, он все равно будет удален, поскольку вы звоните strip()
после разделения.
А что если после разделения на';'
вы получаете что-то кроме пары ключ-значение в списке?Лучше всего проверить, является ли она допустимой парой (содержит ровно одно двоеточие), и пропустить ее в противном случае.
Ваш код становится:
return { k.strip() : v.strip() for k, v in
[ x.split(':') for x in el.attrs.get('style', '').split(';')
if x.count(':') == 1 ] }
Обратите внимание, что я выбрал одно-кавычки.Ваш код использует оба, но лучше выбрать один и придерживаться его.