2010-02-07 6 views
0

누락 처리 :구문 분석 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/except 문을 사용하고 싶지 않습니다. 또한 if/else 문을 사용하고 싶지 않습니다. (이 문장이 있으면 이미 긴 코드의 줄을 두 배로 늘릴 것이기 때문에).

"last_name"이 없으면 "None"을 반환하는 방법이 있습니까?

답변

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

매우 어리 석하지만 똑같이 바보 같은 제한 (no 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이 이것들보다 더 읽기 쉽다고 생각한다.

+0

나는 getattr이 처음에 만들어 졌다고 믿기 때문에 대답의 getattr 버전을 선호합니다! –

+0

읽을 수는 있지만 라인을 두 배로 만듭니다 :) 감사합니다. 다시 알렉스 :) – TIMEX

+0

@alex : 오, 안돼! 내 소스 코드 파일에는 많은 줄 바꿈 문자가 있습니다. 내가 뭘하니? –