调用包含连字符的webservice方法

时间:2018-08-10 12:52:11

标签: python zeep

我正在尝试使用zeep模块调用SAP Web服务。我们有一个称为“ -CTSH -HC_RFC_XCHG_RATE_UPLOAD”的Web服务方法,当尝试调用该方法时,会收到错误消息 “服务没有操作'_'”。由于方法名称带有连字符,因此python不考虑连字符后的字符串。

message = client.service_-CTSH_-HC_RFC_XCHG_RATE_UPLOAD()

注意:我们无法更改SAP Web服务方法名称,因为SAP团队遵循方法名称的某些命名约定。

2 个答案:

答案 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")

Reference