什么都找不到时使用 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>')
我使用 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>')