2017-06-13 40 views
0

我試圖把一個「延遲」使用lxml.html屬性轉換腳本標籤,但我得到的錯誤lxml.html設置錯誤「類型錯誤:參數必須是字節或Unicode,得到了‘NoneType’」

類型錯誤:參數必須是字節或Unicode,得到了 'NoneType'

類型錯誤:組()恰恰2位置參數(給定1)

如果我使用

script.set('defer') 

根據http://lxml.de/lxmlhtml.html

.SET(鍵,值=無): 設置HTML屬性。如果沒有給定值,或者如果值是None,它會建立像

<form novalidate></form> 

一個布爾屬性
<div custom-attribute></div>. 

我的代碼是

import lxml.html 

htmldoc = lxml.html.parse(file) 
headElement = htmldoc.find("head") 
listOfScripts = headElement.xpath("script") 

if len(listOfScripts) > 0: 
    for script in listOfScripts: 
     script.set('defer', value=None) 
+0

嗯,可能是它在LXML錯誤。文檔說'None'(或者如果省略)表示設置爲布爾屬性。但恕我直言,你可以將其設置爲「推遲」字符串值,XHTML也應該吃它 –

回答

0

您鏈接的文檔是最新版本的lxml,你所說的.set()的功能是在3.7版本中加入的,不過你的版本是< 3.7

查看的changelog here

3.7.0 (2016-12-10)

Features added

• GH#201: Calling the method .set('attrname') without value argument (or None) on HTML elements creates an attribute without value that serialises like attrname>. Patch by Daniel Holth.

+0

是的,我的版本是3.6謝謝 –

+0

我已經更新我的lxml到3.8.0.0版本,並且它現在運行沒有錯誤,script.set 'defer')或script.set('defer',None)或script.set('defer',value = None)都會產生

相關問題