Python“if”语句 - 如果xpath为true

时间:2016-04-14 11:05:29

标签: python xpath

我试图在python中编码(非常新的)并且需要检查xpath是否存在然后变量= xpath但是如果不是变量= string。

下面是一个例子

if tree.xpath('//*@id="page"]/div[1]/div/main/div/article/div/div[1]/section[2]/p[1]/span/text()') = true

$value = tree.xpath('//*@id="page"]/div[1]/div/main/div/article/div/div[1]/section[2]/p[1]/span/text()')

else

$value = ''

2 个答案:

答案 0 :(得分:3)

你应该先从整个官方教程开始,因为它会回答你的问题。

第一点:Python对象都有一个'真相'布尔上下文中的值,由对象的类型和实际值定义。对于内置类型,所有空容器(列表,字符串,集等),空字符串,所有数字零和None对象都是假的,其他一切都是真的。对于非内置类型,您必须查看软件包的文档。

内置类型bool也会告诉你给定对象的布尔值,所以下面的所有测试都是等价的:

if myobj: 
    xxx

if bool(myobj):
   xxx

if bool(myobj) == True:
   xxx

但请记住,它并不意味着bool(myobj)myobj相同 - 第一个是对象的布尔值,因此以下内容不等效(除非myobjTrue11.0之一:

if myobj == True:
    xxx

现在wrt /你的实际代码片段:它不是有效的Python(错误的缩进,无效的标识符$value,无效使用赋值运算符=,缺少:之后ifelse语句,True的错误大写...)

假设你的意思是:

# let's make this at least readable:
path = '//*@id="page"]/div[1]/div/main/div/article/div/div[1]/section[2]/p[1]/span/text()'
if tree.xpath(path) == True:
    value = tree.xpath(path)
else:
    value = ''

明显的错误是针对True的显式测试(tree.xpath()没有返回布尔值)。您要么必须明确地将tree.xpath()的返回值转换为布尔值(这是非常冗长,完全无用且绝对是unpythonic),或者只是让Python通过删除测试的== True部分来做正确的事情。

作为旁注:使用相同的参数连续两次调用tree.xpath是浪费处理器周期(两个调用将返回相同的值),因此使用变量 - 它也将使您的代码更具可读性和可维护性。你的代码的Pythonic版本看起来像:

path = '//*@id="page"]/div[1]/div/main/div/article/div/div[1]/section[2]/p[1]/span/text()'  
found = tree.xpath(path)
value = found if found else ''

甚至更简单:

path = '//*@id="page"]/div[1]/div/main/div/article/div/div[1]/section[2]/p[1]/span/text()'  
value = tree.xpath(path) or ''

因为or运算符不会产生布尔值,而是第一个具有真值的操作数,或者如果没有真值,则为最后一个操作数。

答案 1 :(得分:0)

#No need to test == if value is bool. and you not check, you assign value with one =
if anything:
   #Then do this
else:
   #Do this