Ошибка типа: аргумент типа «Объект» не повторяется - PullRequest
0 голосов
/ 21 апреля 2020

Я написал то, что мне показалось простым python сценарием для поиска по нескольким строкам вывода и сопоставления (т. Е. "Grep") в указанной строке c. Вывести список всех очередей без сопоставления с шаблоном достаточно просто:

from qmf.console import Session
sess = Session()
broker = sess.addBroker("amqp://guest/guest@localhost")
queues = sess.getObjects(_class="queue", _package="org.apache.qpid.broker")
for q in queues:
  print (q)

Запуск сценария приводит к следующему выводу (усеченному):

pmena@myhost=> python ./queue_stuff.py
org.apache.qpid.broker:queue[0-1-1-0-62] 0-1-1-0-3:queue01
org.apache.qpid.broker:queue[0-1-1-0-55] 0-1-1-0-3:queue02
org.apache.qpid.broker:queue[0-1-1-0-63] 0-1-1-0-3:queue03
org.apache.qpid.broker:queue[0-1-1-0-51] 0-1-1-0-3:queue04
.
.
org.apache.qpid.broker:queue[0-1-1-0-51] 0-1-1-0-3:queue99

Однако, когда я добавляю оператор "if" в сопоставить с определенной строкой, например:

from qmf.console import Session
sess = Session()
broker = sess.addBroker("amqp://guest/guest@localhost")
queues = sess.getObjects(_class="queue", _package="org.apache.qpid.broker")
for q in queues:
  if 'queue37' in q:
    print (q)

Я получаю следующую ошибку:

pmena@myhost=> python ./queue_stuff.py
Traceback (most recent call last):
  File "./queue_stuff.py", line 6, in <module>
    if 'queue37' in q:
TypeError: argument of type 'Object' is not iterable

Мне кажется, что это простая проблема синтаксиса python, но это не так возможность получить разрешение из других сообщений.

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Проблема в том, что у класса Queue нет метода iter , как вы, возможно, подозреваете. Этот метод должен быть определен для класса для for i in object: для работы. В этом ответе рассматриваются различные обходные пути, которые использовали люди, поэтому вы можете увидеть, какой из них лучше всего соответствует вашим потребностям.

0 голосов
/ 21 апреля 2020

Похоже, q это объект вместо строки. Вы должны проверить

for q in queues:
    print (type(q))

, если q это объект, который вы не можете использовать if 'queue37' in q

...