Издеваться над итератором, чтобы вызвать исключениеPython

Программы на Python
Anonymous
Издеваться над итератором, чтобы вызвать исключение

Сообщение Anonymous »

Я использую python 2.7.15rc1. Я пытаюсь имитировать итератор, чтобы он выдавал исключение при переборе.
Например:

Код: Выделить всё

elements = [1,2,3,Exception('boom!')]
iterable = 

# this does not print anything.
for value in iterable:
...
Я пробовал использовать атрибутside_effect в методе next() экземпляра MagicMock следующим образом:

Я пробовал использовать атрибутside_effect в методе next() экземпляра MagicMock следующим образом:

р>

Код: Выделить всё

from mock import MagicMock

mocked_next = MagicMock()
mocked_next.next.side_effect = [1,2,3,Exception('boom!')]

mocked_iterable = MagicMock()
mocked_iterable.__iter__.return_value = mocked_next
...
# This does not print anything and no exception is raised
for value in mocked_iterable:
print(value)
Я предполагал, что цикл for в конечном итоге приведет к вызову __iter__ для методаocked_iterable, который вернет еще один макетный объект со следующим Атрибут , имеющий Side_effect. Я ожидал, что цикл в конечном итоге вызовет методocked_next.next(), который будет повторять список, который я предоставил ему в Side_effect.

Очевидно, мое понимание неверно. Что мне здесь не хватает? Можно ли этого добиться исключительно с помощью макета, или мне нужно создать собственный итератор для реализации такого поведения?

РЕДАКТИРОВАТЬ: Я пытаюсь для тестирования части обработки исключений фрагмента кода, который выполняет итерацию по итерируемому объекту и, следовательно, пытается эмулировать итератор, вызывающий исключение.

Подробнее здесь: https://stackoverflow.com/questions/555 ... -exception

Вернуться в «Python»