lxml.html设置错误“TypeError:参数必须是字节或unicode,得到'NoneType'”

时间:2017-06-13 14:58:58

标签: python lxml lxml.html

我正在尝试使用lxml.html将'defer'属性放入脚本标记,但是我收到了错误

TypeError:参数必须是字节或unicode,得到'NoneType'

TypeError:set()只需2个位置参数(给定1个)

如果我使用

script.set('defer')

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

.set(key,value = None): 设置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)

1 个答案:

答案 0 :(得分:0)

您链接的文档适用于lxml的最新版本,您正在谈论的.set()功能已添加到版本3.7中,但您的版本是&lt; 3.7

查看更改日志here

  

3.7.0(2016-12-10)

     

添加的功能

     

•GH#201:在HTML元素上调用没有值参数(或None)的方法.set('attrname')   创建一个没有值的属性,其序列化类似于attrname&gt;。丹尼尔霍尔斯补丁。