Разбор XML с BeautifulSoup и обработка отсутствующего элемента - PullRequest
0 голосов
/ 07 февраля 2010

Я использую BeautifulSoup для разбора XML:

xml = """<person>
<first_name>Matt</first_name>
</person>"""

soup = BeautifulStoneSoup(xml)
first_name = soup.find('first_name').string
last_name = soup.find('last_name').string

Но у меня проблема, когда нет last_name, потому что он задыхается.Иногда в корме есть, а иногда нет.Как я могу предотвратить удушение?

Я не хочу использовать операторы try / кроме.Я также не хочу использовать операторы if / else.(Так как он будет удваивать строки уже очень длинного кода, если у меня есть эти операторы).

Есть ли способ просто вернуть "None", если нет "last_name"?

1 Ответ

4 голосов
/ 07 февраля 2010
last_name = soup.find('last_name') and soup.find('last_name').string

Очень глупо, но оно соответствует вашему столь же глупому заявленному ограничению (нет if). Немного менее глупо:

last_name_node = soup.find('last_name')
last_name = last_name_node and last_name_node.string

и

last_name = getattr(soup.find('last_name'), 'string', None)

Эти два не имеют такие же накладные расходы, как первый. Я думаю, что простой if более читабелен, чем любой из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...