Python 3.2.2: необъяснимая ошибка в вызове xmlrpc.client - «аргумент типа int не повторяется» - PullRequest
1 голос
/ 07 января 2012

В отличие от предыдущих вопросов, таких как TypeError: аргумент типа 'int' не повторяется в моем случае не возникает очевидной проблемы с индексированием.

В приведенном ниже коде testcfg.agents - это список имен хостов и / или IP-адресов, а testcfg.port - это порт, который должен использовать xmlrpc вызов. Класс DSEvent моделирует события в Active Directory, а DSEvent.eventcommand представляет собой список, содержащий команду и ее параметры (передаваемые через xmlrpc вызовы агента, который выполняет ее с помощью модуля subprocess.)

# Create a list of agents to process events from
agent_list = []
for a in testcfg.agents:
    agent_list.append(xmlrpc.client.ServerProxy("http://" + a + ':' + testcfg.port))

# Initial user creation:
for j in range(5):
    init_event = DSEvent(type = 'add', is_important = True)
    agent_eB = random.choice(agent_list)
    agent_eB.execute(init_event.eventcommand) # This line throws the fault described below!

Точное исключение, которое я получаю (с удалением различных трассировок в модуль):

xmlrpc.client.Fault: <Fault 1: "<class 'TypeError'>:argument of type 'int' is not iterable">

Я не могу понять, откуда эта ошибка. В то время как init_event.eventcommand является итеративным объектом (списком), я передал и вернул итерируемые объекты через xmlrpc в другом коде, не встречая этой ошибки. Я проверил случайное повторное использование переменных, и я не думаю, что это тоже проблема. Я бы очень хотел помочь здесь!

Для справки, вот полный трекбек для этой ошибки:

Traceback (most recent call last):
  File "C:\Users\Administrator\Downloads\randeventmaker\randeventmakerengine.py",
line 861, in <module>
    sproxy.execute(initializing_event.eventcommand)
  File "C:\Python32\lib\xmlrpc\client.py", line 1095, in __call__
    return self.__send(self.__name, args)
  File "C:\Python32\lib\xmlrpc\client.py", line 1423, in __request
    verbose=self.__verbose
  File "C:\Python32\lib\xmlrpc\client.py", line 1136, in request
    return self.single_request(host, handler, request_body, verbose)
  File "C:\Python32\lib\xmlrpc\client.py", line 1151, in single_request
    return self.parse_response(resp)
  File "C:\Python32\lib\xmlrpc\client.py", line 1323, in parse_response
    return u.close()
  File "C:\Python32\lib\xmlrpc\client.py", line 667, in close
    raise Fault(**self._stack[0])
xmlrpc.client.Fault: <Fault 1: "<class 'TypeError'>:argument of type 'int' is
not iterable">

Ответы [ 2 ]

0 голосов
/ 07 января 2012

Я думаю, что решил это, по крайней мере, частично. Очевидно, что удаленные функции only принимают набор аргументов. Изменение

agent_eB.execute(init_event.eventcommand)

до

agent_eb.execute((init_event.eventcommand,))

, кажется, исправил эту конкретную ошибку.

0 голосов
/ 07 января 2012

Вам, вероятно, нужно передать итерируемое, например, целочисленный список ...

...