Выполнение скрипта в пошаговом режиме в PyCharm - работает по-разному в схожих ситуациях

Не могу понять, почему при выполнении учебного примера (код ниже) в пошаговом режиме в PyCharm с точкой останова на каждой строке (Shift+F9 для старта, затем F8 - каждый шаг) я вижу, как идёт заход в __iter__ класса myRange, а вот как заходит в __iter__ класса MyGeneratorRange, я не вижу - выглядит, как будто в main остаётся выполнение.

Тем не менее, если в __iter__ этого класса поместить отладочный print, то видно, что он заходит каждый раз, как должен это сделать. И результаты верные. Скорее всего, я чего-то не знаю в PyCharm, но непонятно, что именно. Просьба подсказать, что это может быть - классы-то похожи.

Код из учебника Чернышова (убраны ненужные строки, код на несколько примеров рассчитан): https://github.com/MADTeacher/python_basics/blob/master/part5/operations_overloading_3_1.py.

class MyRange:
    def __init__(self, start, stop, step=1):
        self.start = start
        self.stop = stop
        self.step = step
        self.count_value = 0

    # Сюда вижу, как заходит
    def __iter__(self):
        self.count_value = self.start - self.step
        return self
  
    def __next__(self):
        if self.count_value+self.step >= self.stop:
            raise StopIteration
        self.count_value += self.step
        return self.count_value

class MyGeneratorRange:
    def __init__(self, start, stop, step=1):
        self.start = start
        self.stop = stop
        self.step = step

    # А сюда не вижу, как заходит
    def __iter__(self):
        count_value = self.start - self.step
        while count_value+self.step < self.stop:
            count_value += self.step
            yield count_value

if __name__ == "__main__":

    test_range = MyRange(0, 3)
    for firtst_it in test_range:
        print(f'firtst_it = {firtst_it}')
        for second_it in test_range:
            print(f'second_it = {second_it}, '
                    f'firtst_it*second_it = {firtst_it*second_it}')

    test_range = MyGeneratorRange(0, 3)
    for firtst_it in test_range:
        print(f'firtst_it = {firtst_it}')
        for second_it in test_range:
            print(f'second_it = {second_it}, '
                    f'firtst_it*second_it = {firtst_it*second_it}')

Ответы (1 шт):

Автор решения: Сергей

Итого, для работы в данном описанном случае требовалось для пошагового режима у меня нажимать F7, хоть точка останова и была в нужном месте установлена, и F8 должна была работать. При этом у других работает одинаково и с F8. Предположительно причина в каких-то настройках PyCharm. Вывод:

  1. Использовать F7, если F8 не обеспечивает требуемого.
  2. Проверять настройки.
→ Ссылка