我试图在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 = ''
答案 0 :(得分:3)
你应该先从整个官方教程开始,因为它会回答你的问题。
第一点:Python对象都有一个'真相'布尔上下文中的值,由对象的类型和实际值定义。对于内置类型,所有空容器(列表,字符串,集等),空字符串,所有数字零和None
对象都是假的,其他一切都是真的。对于非内置类型,您必须查看软件包的文档。
内置类型bool
也会告诉你给定对象的布尔值,所以下面的所有测试都是等价的:
if myobj:
xxx
if bool(myobj):
xxx
if bool(myobj) == True:
xxx
但请记住,它并不意味着bool(myobj)
与myobj
相同 - 第一个是对象的布尔值,因此以下内容不等效(除非myobj
是True
,1
或1.0
之一:
if myobj == True:
xxx
现在wrt /你的实际代码片段:它不是有效的Python(错误的缩进,无效的标识符$value
,无效使用赋值运算符=
,缺少:
之后if
和else
语句,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