Отладчик Pycharm отключается

Привет у меня есть список из четырех направлений и метод, как

directions = ["NORTH", "EAST", "SOUTH", "WEST"]
def rotate_left(self):
    cycled = cycle(self.directions)
    current = dropwhile(lambda x: x != self.direction, cycled)
    self.direction = next(current)

но как-то после этого метода моя программа останавливается без каких-либо исключений

есть идеи почему? Спасибо

2 ответа

Решение

Похоже, проблема заключалась в том, что в моем коде никогда не могло быть выполнено условие dropwhile(). Из-за ленивого выполнения питонов казалось, что проблема была в том, что я вызвал next(), но это было только потому, что это было, когда выполнялся droptime (), заставляя его циклически проходить по бесконечному списку без выполнения условия.

Извините за тратить время всем.

Я смог повторить описание вашей проблемы со следующим кодом

from itertools import cycle, dropwhile

direction = None
directions = ["NORTH", "EAST", "SOUTH", "WEST"]
cycled = cycle(directions)
current = dropwhile(lambda x: x != direction, cycled)
direction = next(current)

Трудно сказать без остальной части вашего кода, но, судя по всему, начальное значение direction не существует в directions список; смысл это не NORTH, SOUTH, EAST, или же WEST (с учетом регистра). Это вызывает бесконечную итерацию между cycle а также dropwhile

Если вы читаете документацию для itertools, пока

Создайте итератор, который удаляет элементы из итерируемого до тех пор, пока предикат истинен; потом возвращает каждый элемент

Во-первых, учитывая dropwhile отбрасывает элементы до тех пор, пока предикат равен true, он, наконец, остановится, как только достигнет ложного значения, а затем вернет оставшийся элемент. Во-вторых, использование цикла генерирует повторяющийся итератор

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

Поскольку значение direction не существует внутри directions, dropwhile просматривает итератор бесконечной длины и никогда не достигает случая, который нарушает его

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