什么都找不到时使用 lxml findtext 抛出异常的更好方法

Better way to throw exception with lxml findtext when find nothing

我使用 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")) 的东西?

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

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

那你可以用这个方法代替findtext as -

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