Ошибка задержания после разрыва генератора -- python-2.7 поле с участием generator пол Связанный проблема

StopIteration error after breaking out of a Generator


-1
vote

проблема

русский

Я пытаюсь прочитать двоичный файл кусок за раз. Каждый раз, когда генератор будет yeild 1024 байта данных. Когда я хочу остановить, я называю генератор с .send («Стоп»). Я правильно получаю вывод, но я получаю исключение. Я делаю что-то не так или это ожидается, в каком случае я могу справиться с этим?

 <код> def read_epoch_from_file(filename,size=1024):     with open(filename, "rb") as f:         while True:             read_data = f.read(size)             if read_data:                 y = yield read_data                 if y == 'Stop':                     print 'Stopped'                     break             else:                 break         print 'End'         f.close()         return  gen = read_epoch_from_file("Test") readdata_ascii = next(gen) #do somthing readdata_ascii = next(gen) #do somthing readdata_ascii = next(gen) #do somthing gen.send('Stop')   

Выходной вывод виден

 <код> Stopped End  Traceback (most recent call last):   File "C:CVS sandboxMandela2Extractorinary_parser.py", line 50, in <module>     gen.send('Stop') StopIteration   
Английский оригинал

I am trying to read a binary file a chunk at a time. Each time the generator would yeild 1024 bytes of data. When I want to stop i call the generator with .send('Stop'). I get the output correctly but I get an exception. Am I doing something wrong or is this expected in which case how do I handle this?

def read_epoch_from_file(filename,size=1024):     with open(filename, "rb") as f:         while True:             read_data = f.read(size)             if read_data:                 y = yield read_data                 if y == 'Stop':                     print 'Stopped'                     break             else:                 break         print 'End'         f.close()         return  gen = read_epoch_from_file("Test") readdata_ascii = next(gen) #do somthing readdata_ascii = next(gen) #do somthing readdata_ascii = next(gen) #do somthing gen.send('Stop') 

Output seen

Stopped End  Traceback (most recent call last):   File "C:CVS sandboxMandela2Extractorinary_parser.py", line 50, in <module>     gen.send('Stop') StopIteration 
</div
     

Список ответов

0
 
vote

Из моего понимания StopIteration всегда производится генератором, когда больше нет yield значения. Это исключение обычно потребляется автоматически в пределах <код> for LOOP. В моем случае исключение будет запустить, пока у меня есть <код> SoundPoolCompat0 relogy Block, чтобы иметь дело с этим. Ниже приведен код, который я использовал для обработки этого исключения. Если это не лучший способ сделать это, пожалуйста, дайте мне знать.

 <код> SoundPoolCompat1  
 

From my understanding the StopIteration is always produced by the generator when there is no more yield values left. This exception is usually consumed automatically within a for loop. In my case the exception would bubble up, until I have a try/except statement block to deal with it. Below is the code I have used to handle this exception. If this is not the best way to do this please let me know.

try:     gen = read_epoch_from_file("Test")     readdata_ascii = next(gen)     #do somthing     readdata_ascii = next(gen)     #do somthing     readdata_ascii = next(gen)     #do somthing     gen.send('Stop') except StopIteration:     pass finally:     del gen 
</div
 
 

Связанный проблема

2  Скапировка не вызывает никакой другой функции после «__init__»  ( Scrapy not calling any other function after init ) 
ОС: Ubuntu 16.04 Стек - Scrapy 1.0.3 + Selenium Я довольно новичок в Scrape, и это может звучать очень простое, но в моем пауке только « init » выполняется. Л...

-5  Python Fizzizz  ( Python fizzbuzz ) 
Мне дали этот вопрос в Python: Внесите список номеров от пользователя и запустить Fizzbuzz в этом списке. Когда вы ведете через список, запомните правила:...

1  Как найти данные из базы данных  ( How to find the data from database ) 
Я работаю над моим сценарием Python, чтобы получить список каналов и программ, когда я вытащил данные из базы данных sqlite3. Я использую переменную channel...

0  Использование Selenium Python при взаимодействии с веб-сайтом вручную  ( Using selenium python while interacting with a website manually ) 
Обновление: Я создал пользовательский профиль с совместимым способом IE в качестве по умолчанию и получить ту же сообщение об ошибке, поэтому кажется что-то о...

0  Запуск сценария Python со значениями от Views.py в Django  ( Running a python script with values from views py in django ) 
Я пытаюсь передать значение, которое я получил в просмотру .py файл в django в другой сценарий python, который я написал, но я понятия не имею, как это сделат...

2  Как получить словарь, чтобы сохранить вновь добавленный элемент для следующего запуска?  ( How to get dictionary to save newly added item for the next run ) 
Я изучаю Python, и я сделал локатор пароля, который должен копировать пароль в буфер обмена. Если он не найдет учетную запись, который вы ищете, это спросит, ...

11  Локализация: Django-admin Compilemessages Skip Venv  ( Localization django admin compilemessages skip venv ) 
Я использую локализацию в Django 1.11 приложения. Я могу исключить папку виртуальной среды и <код> node_modules папку при добавлении сообщений в файле сооб...

51  Запросы Python «Пропасные зависимости от поддержки носков» при использовании SOCKS5 из терминала  ( Pythons requests missing dependencies for socks support when using socks5 fro ) 
Я пытаюсь взаимодействовать с API из My Python 2.7 Shell, используя пакет, который опирается на запросы Python. Вещь - это удаленный адрес блокируется моей се...

0  Python CGI Script для сканирования удаленного HTTP-клиента  ( Python cgi script to scan remote http client ) 
У меня возникли проблемы с тем, чтобы получить этот веб-скрипт Python для запуска и распечатки результатов на веб-странице. Это небольшой проект, который я иг...

1  Как установить по умолчанию ответ на кнопку с add_action_widget в Gtk.Dialog  ( How to set default response on button with add action widget in gtk dialog ) 
<Р> Я loocking для любой идеи, чтобы решить мою проблему <Р> Пожалуйста, смотрите последующий код. Это демо, чтобы объяснить, что о На самом деле мне нужно ис...

0  Создание функции хвоста: реверсирующие линии в файле  ( Making tail function reversing lines in a file ) 
Я пытаюсь определить функцию, которая выводит последние N строки в файле. Ниже приведена функция, похоже, в основном работает, кроме того, что первые две стро...

1  OSERROR Во время загрузки совмещенной библиотеки C Python (неопределенный символ: CheckedCalloc)  ( Oserror during loading of c shared library in python undefined symbolcheckedca ) 
Я хотел бы попросить некоторую помощь о следующей проблеме. Некоторые теория: я использую Ubuntu 12.04, Python2.7, и я пытаюсь загрузить Chaired Library (li...

2  Python: как распечатать символ из переменной с строкой Unicode  ( Pythonhow to print the character from a variable with unicode string ) 
Я практикую, как печатать Unicode в Python Мой вопрос: как можно редактировать код ниже, чтобы перевести на Unicode Чтобы распечатать результат всего за 201...

1  Обновление Numpy версии  ( Upgrading numpy version ) 
У меня есть три насыпки в моей системе. Они находятся в /usr/local/lib/package2.7/dist-packages/numpy, ~ / anaconda2 / lib / python2.7 / site-packages / numpy...

3  Установка Django на OSX  ( Django installation on osx ) 
<Сильные> ОС: OS X 10.7.5 У меня есть pyhton 3.3.2 установлен в папке приложений, и я использую простаистых сценариев Python. Я использовал ниже команду дл...

Связанный проблема

2  Скапировка не вызывает никакой другой функции после «__init__» 
-5  Python Fizzizz 
1  Как найти данные из базы данных 
0  Использование Selenium Python при взаимодействии с веб-сайтом вручную 
0  Запуск сценария Python со значениями от Views.py в Django 
2  Как получить словарь, чтобы сохранить вновь добавленный элемент для следующего запуска? 
11  Локализация: Django-admin Compilemessages Skip Venv 
51  Запросы Python «Пропасные зависимости от поддержки носков» при использовании SOCKS5 из терминала 
0  Python CGI Script для сканирования удаленного HTTP-клиента 
1  Как установить по умолчанию ответ на кнопку с add_action_widget в Gtk.Dialog 
0  Создание функции хвоста: реверсирующие линии в файле 
1  OSERROR Во время загрузки совмещенной библиотеки C Python (неопределенный символ: CheckedCalloc) 
2  Python: как распечатать символ из переменной с строкой Unicode 
1  Обновление Numpy версии 
3  Установка Django на OSX