找不到任何东西时,用lxml findtext抛出异常的更好方法

时间:2015-08-27 17:31:04

标签: python error-handling lxml

我使用lxml etree来解析xml文件,并希望确保文件中有一些字段。我的代码就像这样。

try:
    with open(filename, 'r') as conf:
        rt = etree.parse(conf)   

    CONF['user1'] = rt.findtext('//user1')
    if not CONF['user1']:
        raise ValueError('Cannot find uer1 in conf file')  

    CONF['field2'] = rt.findtext('//field2') 
    if not CONF['field2']:
        #raise again 

    # And so on         
Except Exception as err:
    print err

你可以看到编码很繁琐。是否有类似rt.findtext('//field', default=rasie exception("With my message"))的内容?

1 个答案:

答案 0 :(得分:3)

我没有看到任何这样的方法直接执行此操作,但您可以创建自己的函数来执行此操作,示例 -

def findtext_with_exception(element,xpath,message):
    ret = element.findtext(xpath)
    if not ret:
        raise ValueError(message)
    return ret

然后您可以使用此方法代替findtext作为 -

CONF['user1'] = findtext_with_exception(rt, '//user1', 'Cannot find uer1 in conf file')
CONF['field2'] = findtext_with_exception(rt, '//field2', '<Next message>')