Исключение StopItate

Функция

def _copying(self):
    result = self.result.toPlainText().strip().split('\n')
    to_copy = '\n'.join(result)

    pyperclip.copy(to_copy)

в MainWindow() моего проекта PyQt5 вызывает исключение "StopIteration" в contextlib.py _GeneratorContextManager(), line 119 'next(self.gen)',result это ui.TextEdit объект. Не могли бы вы сказать мне, что это значит? Google говорит, что я должен обернуть свою функцию в конструкцию, но я не совсем понимаю, как, и не уверен, что это хорошая идея.

Отладчик говорит:

__exception__ = {tuple} <class 'tuple'>: (<class 'StopIteration'>, StopIteration(), <traceback object at 0x045DA918>)
 0 = {type} <class 'StopIteration'>
  args = {getset_descriptor} <attribute 'args' of 'BaseException' objects>
  value = {member_descriptor} <member 'value' of 'StopIteration' objects>
 1 = {StopIteration} 
  args = {tuple} <class 'tuple'>: ()
  value = {NoneType} None
 2 = {traceback} <traceback object at 0x045DA918>
  tb_frame = {frame} __exit__ [contextlib.py:119]  id:54111736
  tb_lasti = {int} 16
  tb_lineno = {int} 119
  tb_next = {NoneType} None
 __len__ = {int} 3

Консоль ничего не говорит. Но проект рушится.

1 ответ

Решение

Это StopItered совершенно нормально и ожидаемо. Это часть нормальной работы contextlib.contextmanager, Это должно произойти, и это поймано и обработано немедленно; если этого не произойдет, есть проблема.

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

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