奇怪的python类型;文本“;?

奇怪的python类型;文本“;?,python,suds,Python,Suds,我使用库“suds”与SOAP服务器通信。 请求成功完成后,我收到答复: answer = client.invoke('RetrieveBLABLAObject', modelthings) 这个答案是请求对象的许多不同字段的结构。每个字段都是由“字符串”参数“\u类型”和参数“值”组成的结构,可能有不同的类型 回答[键][值]-返回参数“值”的值。但在调试模式下(我使用Python2.7.6和PyCharm),它向我显示值的类型为“Text”。不是“str”,不是“unicode”,而是“

我使用库“suds”与SOAP服务器通信。 请求成功完成后,我收到答复:

answer = client.invoke('RetrieveBLABLAObject', modelthings)
这个答案是请求对象的许多不同字段的结构。每个字段都是由“字符串”参数“\u类型”和参数“值”组成的结构,可能有不同的类型

回答[键][值]-返回参数“值”的值。但在调试模式下(我使用Python2.7.6和PyCharm),它向我显示值的类型为“Text”。不是“str”,不是“unicode”,而是“Text”

如果我查一下

isinstance(obj[cur_key]['value'], unicode)
它告诉我,它将此文本计算为“unicode”。但如果将其与具有相同主体的unicode进行比较,则返回false:

if obj[cur_key]['value'] != u'String that I know is there':
    print("true") #it is printing, but it shouldn't
为什么会发生这种情况?如何将“文本”转换为unicode? 我试过了


它属于例外情况。如何处理这种“文本”类型?

您很可能看到的是
unicode
的一个子类。我想你在这里有一个例子。由于这是一个子类,
isinstance(obj,unicode)
是正确的

它的值已经是一个unicode字符串,因此解码将首先触发一个使用ASCII的隐式编码,这将确实失败

只需使用以下命令,即可将类型转换为unicode:

unicode(obj[cur_key]['value'])
但考虑到XML值仍然可以转义;
.unescape()
方法返回一个unescape版本(如果没有首先转义该值,它将返回
self

当与另一个字符串进行比较时,请确保它们完全相等。Unicode值可以包含许多“隐藏”值,如零宽度字符或也可以以组合形式表示的组合字符。使用
repr(value)
获取转义表示,使这些代码点更加明显


suds.sax.text.text()
类不进行特殊情况下的平等性测试,因此您的
=
test的工作原理与值是
unicode
字符串而不是子类的情况相同。

repr(obj[cur_key]['value'])给了您什么?还有什么例外?@Martijn是对的,它是子类,一切都如他所描述的。无论如何,谢谢你的帮助。
unicode(obj[cur_key]['value'])