Вызвать метод веб-службы, содержащий дефис

Я пытаюсь вызвать веб-службу SAP с помощью модуля zeep. У нас есть метод веб-службы под названием «-CTSH-HC_RFC_XCHG_RATE_UPLOAD», и при попытке вызвать этот метод появляется сообщение об ошибке «Сервис не имеет операции '_'». Поскольку в имени метода есть дефис, python не учитывает строки после дефиса.

message = client.service_-CTSH_-HC_RFC_XCHG_RATE_UPLOAD()

Примечание. Мы не можем изменить имя метода веб-службы SAP, поскольку команда SAP следует определенному соглашению об именах для имени метода.

если это внешний модуль python, как именно ему удалось определить метод с дефисом без получения ошибки?

N Chauhan 10.08.2018 14:54

Возможно, вам стоит показать объявление такого объекта. Вы уверены, что он написан на Python?

ibarrond 10.08.2018 15:05
0
2
194
2

Ответы 2

Это недопустимый синтаксис 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

Вы пробовали это?

import client.service

method_called =  __import__("_-CTSH_-HC_RFC_XCHG_RATE_UPLOAD")

Справка

method_called = __import __ ("- CTSH-HC_RFC_XCHG_RATE_UPLOAD")

Deepa Venkatachalam 10.08.2018 15:17

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