2014-03-13 3 views
0
를 사용한 구문 분석 XML을 통해 다른 예외

I가 내가 웹 페이지에서 분석 한 다음 XML :파이썬 경우 ElementTree

<!-- 
Parts from the iGEM Registry of Standard Biological Parts 
--> 
<rsbpml> 
<part_list> 
    <part> 
    <part_id>151</part_id> 
    <part_name>BBa_B0034</part_name> 
    <part_short_name>B0034</part_short_name> 
    <part_short_desc>RBS (Elowitz 1999) -- defines RBS efficiency</part_short_desc> 
    <part_type>RBS</part_type> 
    <release_status>Released HQ 2013</release_status> 
    <sample_status>In stock</sample_status> 
    <part_results>Works</part_results> 
    <part_nickname>SAMT</part_nickname> 
    <part_rating/> 
    <part_url>http://parts.igem.org/Part:BBa_J45001</part_url> 
    <part_entered>2006-06-07</part_entered> 
    <part_author>Kate Broadbent</part_author> 
    <deep_subparts/> 
    <specified_subparts/> 
    <specified_subscars/> 
    <sequences>...</sequences> 
    <features>...</features> 
    <parameters> 
    <!--...--> 
    <!--...--> 
    <parameter>...</parameter> 
    <parameter> 
    <name>swisspro</name> 
    <value>Q8H6N2</value> 

나는 swisspro 매개 변수 값을 반환하는 몇 가지 코드를 가지고; Q8H6N2. 그러나 swisspro 매개 변수가없는 경우 코드가 오류를 발생 시키길 원합니다.

은 지금까지 나는 아래의 코드를 시도했지만 작동하지 않습니다 : 그 else 문 존재와

def part_attrib(self,x): 
     if x == 'uniprot_id': 
      for parameter in self.root.iter(tag='parameter'): 
       name = parameter.find('name') 
       if name is not None and name.text == 'swisspro': 
        return parameter.find('value').text 
       else: 
        return "No UniProt ID present." 

이 코드는 항상 swisspro 매개 변수의 존재가 있는지 여부 오류 문을 출력합니다. else 인수를 생략하면 코드가 작동하지만 swisspro 매개 변수가없는 경우 오류가 발생하지 않습니다.

내가 뭘 잘못하고 있니?

이러한 <paramter> 섹션 중 일부가 XML에 강조 표시되어야합니다.

당신은 루프 전에 값을 설정할 수 있습니다

답변

1

:

swisspro_value = None 

for parameter in self.root.iter(tag='parameter'): 
    name = parameter.find('name') 
    if name is not None and name.text == 'swisspro': 
     swisspro_value = parameter.find('value').text 
     break 

return swisspro_value or "No UniProt ID present." 
+0

예, 작동합니다. 고마워요! – Charon

0

당신은 당신이 함수의 끝에 그것을 만들 경우 루프, 당신은 또한 당신의 오류 메시지를 반환 할 수 귀하에 복귀하고 있기 때문에,

def part_attrib(self,x): 
     if x == 'uniprot_id': 
      for parameter in self.root.iter(tag='parameter'): 
       name = parameter.find('name') 
       if name is not None and name.text == 'swisspro': 
        return parameter.find('value').text 
     return "No UniProt ID present."