Выполнение скрипта в пошаговом режиме в 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. Вывод:
- Использовать F7, если F8 не обеспечивает требуемого.
- Проверять настройки.