Исключение StopIteration

функция

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 говорит, что я должен обернуть свою функцию в конструкцию with, но я действительно не понимаю, как это сделать, и не уверен, что это хорошая идея.

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

__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

Консоль ничего не говорит. Но проект терпит крах.


person Age of Creations    schedule 01.02.2019    source источник
comment
Покажите нам полную трассировку.   -  person Alex Hall    schedule 01.02.2019
comment
@AlexHall Обновлено   -  person Age of Creations    schedule 01.02.2019
comment
Это не трассировка. Трассировка - это вещь от Traceback (последний последний вызов): до WhateverError: материал сломался, потому что причины, которые печатаются, когда исключение не обрабатывается. Вы, вероятно, не можете показать нам его, потому что это исключение является нормальным и обрабатывается.   -  person user2357112 supports Monica    schedule 01.02.2019
comment
Что вы имеете в виду под крахом? Он просто резко останавливается без исключения? Вы видите только StopIteration в отладчике?   -  person Alex Hall    schedule 01.02.2019
comment
@AlexHall Да, это то, что я имею в виду под сбоем. И да, я вижу это исключение только в отладчике. Консоль не показывает никаких проблем.   -  person Age of Creations    schedule 01.02.2019
comment
@AlexHall хорошо. Проблема решается сама собой. Очевидно, есть и другая причина сбоев. Может дело в памяти?   -  person Age of Creations    schedule 01.02.2019


Ответы (1)


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

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

person user2357112 supports Monica    schedule 01.02.2019
comment
Ух ты. Теперь работает без проблем. Я воспроизведу ошибку, но у меня пока нет никаких идей о причине сбоев. Может дело в памяти? - person Age of Creations; 01.02.2019