你真的應該被其它的東西之前做整個官方教程開始,因爲它會anwser你的問題。
第一點:Python對象在布爾上下文中都有一個「真值」,它由對象的類型和實際值定義。對於內建類型,所有的空容器(列表,類型的字典,集等),空字符串,所有數值零和None
對象都是假的,一切是真的。對於非內建類型,你必須檢查包裝的文檔。
的內置式bool
還會告訴你一個給定對象的布爾值,所以所有的下面的測試是等價的:
if myobj:
xxx
if bool(myobj):
xxx
if bool(myobj) == True:
xxx
但請記住,這並不意味着bool(myobj)
是相同myobj
- 第一個是你的對象的布爾值,所以下面是NOT當量(除非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()
的返回值轉換爲布爾值(它非常冗長,完全無用,並且明確地不變化),或者讓Python通過刪除== True
部分測試來做正確的事情。
作爲一個附註:使用相同的參數連續調用tree.xpath
會浪費處理器週期(兩個調用都將返回相同的值),所以使用一個變量代替 - 它也將使您的代碼更具可讀性和可維護的。你的代碼的Python的版本看起來是這樣的:
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
運營商將不會產生一個布爾值,但無論是第一它是有一個操作數如果沒有真值,則返回true或最後一個操作數。
請先閱讀python文檔 – GrvTyagi
任何非空列表將被視爲真實,檢查xpath是否爲空,如果未將您的變量設置爲等於 –
的內容,請修復您的代碼的縮進。 –