我有以下从网页解析的XML:
<!--
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
参数,我希望代码抛出错误。
到目前为止,我已经尝试过以下代码,但它不起作用:
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."
当存在else
语句时,代码始终输出错误语句,无论是否存在swisspro
参数。如果省略else
参数,则代码可以正常工作,但如果没有swisspro
参数,则不会抛出错误。
我做错了什么?
我应该强调XML中有几个<paramter>
部分。
答案 0 :(得分: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."
答案 1 :(得分:0)
由于您在for循环中返回,如果您将其发送到函数末尾,您也可以返回错误消息,
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."