0

我有以下从网页解析的 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参数,则不会抛出错误。

我究竟做错了什么?

<paramter>我应该强调在 XML中有几个这样的部分。

4

2 回答 2

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."
于 2014-03-13T14:48:44.027 回答
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."
于 2014-03-13T14:56:15.280 回答