Я нахожу, что пишу код, как показано ниже. Это очень много. То, что я хотел бы сделать, это назначить индексы массива для разных переменных, а если есть indexerror, присвойте false. Я чувствую, что для этого должен быть более короткий синтаксис (по сравнению с тем, что у меня ниже).Как заменить несколько блоков try/except с меньшим количеством кода?
Редактировать - вот мой фактический код. page
- действительный объект lxml.html. Каждый из селекторов может или не может возвращать значение, в зависимости от того, присутствует ли этот раздел на странице.
def extract_data(page):
# given lxml.html obj, extract data from g+ page and return as dict
try:
profile_name = page.xpath('//div[@guidedhelpid="profile_name"]/text()')[0]
except IndexError:
profile_name = False
try:
website = page.cssselect('span.K9a')[0].text_content().rstrip('/')
except IndexError:
website = False
try:
contact_div = html.tostring(page.xpath('//div[normalize-space(text())="Contact Information"]/../../..')[0])
except IndexError:
contact_div = False
return {
'profile_name' : profile_name,
'website' : website,
'contact_div' : contact_div,
}
несвязанные предложения: 'лист (1,2)' должен быть '[1, 2]' и никакая переменная не должна называться 'L' (если вы действительно хотите одной буквы L, используйте' L' вместо). См. Http://www.python.org/dev/peps/pep-0008/ – ThiefMaster
О вашем фактическом вопросе: что вы пытаетесь сделать? Поскольку речь идет о lxml, возможно, есть более чистый способ сделать то, что вы пытаетесь сделать ... – ThiefMaster
@ travis-leleu, вам действительно нужен доступ ко всем элементам списка за один раз? Как правило, вы обрабатываете элементы из списка по одному, в этом случае код будет 'для элемента в L: do_something (item)' – vikramls