以下是我的python脚本的一部分,它给出了错误:
tree = ET.ElementTree(element_table)
xml = ET.tostring(element_table)
xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><?xml- stylesheet type=\"text/xsl\" href=\".\/xsl\/brsdk.xsl\"?>" + xml
obis_file = open( "OBIS_Support_Chart_" + sdk_version.replace( ".","_" ) + ".xml", "w" )
obis_file.write( xml.decode('utf8') )
在运行脚本期间标记的错误如下:
Traceback (most recent call last):
File "parse.py", line 115, in <module>
xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><?xml- stylesheet type=\"text/xsl\" href=\".\/xsl\/brsdk.xsl\"?>" + xml
TypeError: Can't convert 'bytes' object to str implicitly
脚本中有什么问题?我使用的是Python 3.4。
答案 0 :(得分:3)
ElementTree.tostring的文档提到了这种行为:
使用
encoding="unicode"
生成Unicode字符串(否则,生成字节串)。
因此,在您的情况下,由于在调用encoding="unicode"
时未指定tostring()
,因此它会返回bytes
个对象。因此,当您尝试将字符串与先前的tostring()
输出连接时,您尝试将字符串与字节连接起来,从而产生错误。
指定要解决此问题的编码:
xml = ET.tostring(element_table, encoding='unicode')
由于您有一个实际的str
对象,因此在写入文件时您也不再需要解码xml
:
obis_file.write(xml)