我正在尝试使用zeep模块调用SAP Web服务。我们有一个称为“ -CTSH -HC_RFC_XCHG_RATE_UPLOAD”的Web服务方法,当尝试调用该方法时,会收到错误消息 “服务没有操作'_'”。由于方法名称带有连字符,因此python不考虑连字符后的字符串。
message = client.service_-CTSH_-HC_RFC_XCHG_RATE_UPLOAD()
注意:我们无法更改SAP Web服务方法名称,因为SAP团队遵循方法名称的某些命名约定。
答案 0 :(得分:0)
那不是有效的python语法。 Python将代码解析为:
client.service_ - CTSH_-HC_RFC_XCHG_RATE_UPLOAD()
即减去client.service_
和该函数调用。
您可以改用getattr
:
method = getattr(client, "service_-CTSH_-HC_RFC_XCHG_RATE_UPLOAD")
method() # call the method
假设zeep
不会以其他方式“标准化”无效的方法名称。
工作示例:
>>> class A:
... pass
...
>>> setattr(A, "service_-CTSH_-HC_RFC_XCHG_RATE_UPLOAD", lambda self: print('called'))
>>>
>>> a = A()
>>> getattr(a, "service_-CTSH_-HC_RFC_XCHG_RATE_UPLOAD")()
called
>>> method = getattr(a, "service_-CTSH_-HC_RFC_XCHG_RATE_UPLOAD")
>>> method
<bound method <lambda> of <__main__.A object at 0x7f4651c5e518>>
>>> method()
called
答案 1 :(得分:0)
您尝试过吗?
import client.service
method_called = __import__("_-CTSH_-HC_RFC_XCHG_RATE_UPLOAD")