TypeError: initial_value должно быть Unicode или None, а не str,

Я использую SOAPpy для сервисов soap wsdl. Я слежу за этим тотуралом. Мой код как следовать

from SOAPpy import WSDL
wsdlfile = 'http://track.tcs.com.pk/trackingaccount/track.asmx?WSDL'
server = WSDL.Proxy(wsdlfile)

Я получаю эту ошибку в последней строке моего кода

Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/adil/Code/mezino/RoyalTag/royalenv/local/lib/python2.7/site-packages/SOAPpy/WSDL.py", line 85, in __init__
self.wsdl = reader.loadFromString(str(wsdlsource))
File "/home/adil/Code/mezino/RoyalTag/royalenv/local/lib/python2.7/site-packages/wstools/WSDLTools.py", line 52, in loadFromString
return self.loadFromStream(StringIO(data))
TypeError: initial_value must be unicode or None, not str

Я пытался преобразовать строку в UTF, используя

wsdlFile = unicode('http://track.tcs.com.pk/trackingaccount/track.asmx?WSDL, "utf-8")

но все еще с той же ошибкой. Чего здесь не хватает?

0 ответов

Я только столкнулся с этой проблемой с некоторым очень старым кодом 2.7, который больше не работал из-за обновления TLS. После обновления до самой последней версии Python 2 у меня появилась эта проблема.

Я смог исправить это, настроив новую виртуальную среду, а затем изменив пакет wstools в этой виртуальной среде, чтобы использовать BytesIO вместо StringIO.

Замените каждый необходимый экземпляр StringIO. Например:

# WSDLTools.py
...
from IO import BytesIO
...
return self.loadFromStream(BytesIO(data))

Не идеально, но это сработало. Проще, чем все перенести на Python 3...

Другие вопросы по тегам