2016-04-14 36 views
-1

即時通訊嘗試在python中編碼(非常新),需要檢查xpath是否存在,然後變量= xpath,但如果不是變量= string。Python「if」語句 - 如果xpath爲真

下面是一個例子

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

請先閱讀python文檔 – GrvTyagi

+0

任何非空列表將被視爲真實,檢查xpath是否爲空,如果未將您的變量設置爲等於 –

+0

的內容,請修復您的代碼的縮進。 –

回答

3

你真的應該被其它的東西之前做整個官方教程開始,因爲它會anwser你的問題。

第一點:Python對象在布爾上下文中都有一個「真值」,它由對象的類型和實際值定義。對於內建類型,所有的空容器(列表,類型的字典,集等),空字符串,所有數值零和None對象都是假的,一切是真的。對於非內建類型,你必須檢查包裝的文檔。

的內置式bool還會告訴你一個給定對象的布爾值,所以所有的下面的測試是等價的:

if myobj: 
    xxx 

if bool(myobj): 
    xxx 

if bool(myobj) == True: 
    xxx 

但請記住,這並不意味着bool(myobj)是相同myobj - 第一個是你的對象的布爾值,所以下面是NOT當量(除非myobjTrue一個,11.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()的返回值轉換爲布爾值(它非常冗長,完全無用,並且明確地不變化),或者讓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或最後一個操作數。

+0

這使sence - 對不起,我來自一個PHP背景,這就是爲什麼你看到了很多代碼中的PHP。 當我運行底部代碼時,出現錯誤lxml.etree.XPathEvalError:found = tree.xpath(path)上的無效表達式 –

+0

@emmaperkins這是另一個 - 大多數不相關的問題。還有如何處理異常也記錄在案(在官方教程和文檔中)。 –

+0

謝謝這是一個很好的答案,並幫助我很多 –

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