Steps to reproduce
- pylint
Current behavior
Traceback (most recent call last):
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/protocols.py", line 306, in _arguments_infer_argname
context.extra_context)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/arguments.py", line 31, in __init__
self._unpacked_kwargs = self._unpack_keywords(keywords)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/arguments.py", line 77, in _unpack_keywords
inferred = next(value.infer(context=context))
StopIteration
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/bin/pylint", line 11, in <module>
sys.exit(run_pylint())
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/pylint/__init__.py", line 19, in run_pylint
Run(sys.argv[1:])
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/pylint/lint.py", line 1394, in __init__
linter.check(args)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/pylint/lint.py", line 801, in check
self._do_check(files_or_modules)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/pylint/lint.py", line 938, in _do_check
self.check_astroid_module(ast_node, walker, rawcheckers, tokencheckers)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/pylint/lint.py", line 1018, in check_astroid_module
walker.walk(ast_node)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/pylint/utils.py", line 1159, in walk
self.walk(child)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/pylint/utils.py", line 1159, in walk
self.walk(child)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/pylint/utils.py", line 1159, in walk
self.walk(child)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/pylint/utils.py", line 1156, in walk
cb(astroid)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/pylint/checkers/typecheck.py", line 1349, in visit_subscript
inferred = safe_infer(node.value)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/pylint/checkers/utils.py", line 812, in safe_infer
next(inferit)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/decorators.py", line 84, in wrapped
res = next(generator)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/bases.py", line 113, in _infer_stmts
for inferred in stmt.infer(context=context):
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/util.py", line 144, in limit_inference
yield from islice(iterator, size)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/context.py", line 103, in cache_generator
for result in generator:
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/decorators.py", line 84, in wrapped
res = next(generator)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/bases.py", line 113, in _infer_stmts
for inferred in stmt.infer(context=context):
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/util.py", line 144, in limit_inference
yield from islice(iterator, size)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/context.py", line 103, in cache_generator
for result in generator:
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/decorators.py", line 123, in raise_if_nothing_inferred
yield next(generator)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/decorators.py", line 84, in wrapped
res = next(generator)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/inference.py", line 197, in infer_call
context=callcontext,
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/scoped_nodes.py", line 1609, in infer_call_result
yield from returnnode.value.infer(context)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/util.py", line 144, in limit_inference
yield from islice(iterator, size)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/context.py", line 103, in cache_generator
for result in generator:
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/decorators.py", line 84, in wrapped
res = next(generator)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/bases.py", line 113, in _infer_stmts
for inferred in stmt.infer(context=context):
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/util.py", line 144, in limit_inference
yield from islice(iterator, size)
File "/Users/MYSELF/Sites/MYSITE/MYSITEenv/lib/python3.7/site-packages/astroid/context.py", line 103, in cache_generator
for result in generator:
RuntimeError: generator raised StopIteration
Expected behavior
Report as normal.
pylint —version output
pylint 2.0.0
astroid 2.0.0.dev4
Python 3.7.0 (default, Jun 29 2018, 20:13:13)
[Clang 9.1.0 (clang-902.0.39.2)]
Hello,
I created this class:
class ssource: def __init__(self, n): self.list1=[] self.list2=[] self.i=0 self.max=n self.At=stream(self, self.list1) self.Bt=stream(self, self.list2) def __next__(self): if self.i>=self.max: raise StopIteration print(f"NEXTSYNC:{self.i}") self.list1.append(f'A{self.i}') self.list2.append(f'B{self.i}') self.i += 1
And I am testing my class with this code script:
src=ssource(10) Ai=src.Ait Bi=src.Bit for i in range(5): print(f'A->{next(Ai)}') for i in range(8): print(f'B->{next(Bi)}') for a in Ai : print(f'A->{a}')
And I am getting this error:
Error:
NEXTSYNC:0
A->A0
NEXTSYNC:1
A->A1
NEXTSYNC:2
A->A2
NEXTSYNC:3
A->A3
NEXTSYNC:4
A->A4
B->B0
B->B1
B->B2
B->B3
B->B4
NEXTSYNC:5
B->B5
NEXTSYNC:6
B->B6
NEXTSYNC:7
B->B7
A->A5
A->A6
A->A7
NEXTSYNC:8
A->A8
NEXTSYNC:9
A->A9
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-36-b322da59c757> in stream(src, fifo)
4 while True:
----> 5 if len(fifo)==0: next(src)
6 yield(fifo.pop(0))
<ipython-input-36-b322da59c757> in __next__(self)
17 def __next__(self):
---> 18 if self.i>=self.max: raise StopIteration
19 print(f"NEXTSYNC:{self.i}")
StopIteration:
The above exception was the direct cause of the following exception:
RuntimeError Traceback (most recent call last)
<ipython-input-39-9b42e44489d5> in <module>
7 for i in range(8):
8 print(f'B->{next(Bi)}')
----> 9 for a in Ai : print(f'A->{a}')
RuntimeError: generator raised StopIteration
here is my another function
def stream(src, flist): try: while True: while len(flist)==0: next(src) yield(flist.pop(0)) except StopIteration: pass # raise StopIteration
quest
Wafer-Thin Wafer
Posts: 82
Threads: 37
Joined: Nov 2020
Reputation:
0
Hello again,
I did nothing but now it is ok. I am studying on jupyter notebook maybe because of some connection problems I got this error.
OR If you have any idea, you are very welcome but it is not ok and I do not know how it is ok
Я пытаюсь запустить этот код:
import web
urls = (
'/', 'index'
)
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()
Но это выдает мне эту ошибку каждый раз
C:UsersaidkeDesktop>python app.py
Traceback (most recent call last):
File "C:UsersaidkeAppDataLocalProgramsPythonPython37-32libsite-packageswebutils.py", line 526, in take
yield next(seq)
StopIteration
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "app.py", line 14, in <module>
app = web.application(urls, globals())
File "C:UsersaidkeAppDataLocalProgramsPythonPython37-32libsite-packageswebapplication.py", line 62, in __init__
self.init_mapping(mapping)
File "C:UsersaidkeAppDataLocalProgramsPythonPython37-32libsite-packageswebapplication.py", line 130, in init_mapping
self.mapping = list(utils.group(mapping, 2))
File "C:UsersaidkeAppDataLocalProgramsPythonPython37-32libsite-packageswebutils.py", line 531, in group
x = list(take(seq, size))
RuntimeError: generator raised StopIteration
Я попробовал чужой код, и случилось то же самое. Кроме того, я попытался переустановить web.py (экспериментальный), но он все еще не работал.
Перейти к ответу
Данный вопрос помечен как решенный
Ответы
6
Судя по путям к файлам, похоже, что вы используете Python 3.7. Если так, то вас поймает новое в 3.7 поведение:
PEP 479 is enabled for all code in Python 3.7, meaning that StopIteration exceptions raised directly or indirectly in coroutines and generators are transformed into RuntimeError exceptions. (Contributed by Yury Selivanov in bpo-32670.)
До этого изменения StopIteration, поднятый генератором или проходящий через него, просто заканчивал срок службы генератора (исключение было тихо проглочено). Модуль, который вы используете, необходимо будет перекодировать, чтобы он работал с версией 3.7.
Скорее всего, их нужно будет изменить:
yield next(seq)
К:
try:
yield next(seq)
except StopIteration:
return
Итак, во время моего недавнего самообучения на Python, курс требовал, чтобы я установил Web.py, и я получал эту ошибку, и, как было сказано в одном из ответов, его нужно было обновить, чтобы он был совместим с Python 3.7.
Я установил пакет с pip3 install web.py==0.40-dev1, столкнулся с этой ошибкой и начал искать решение в Интернете.
Что я сделал, так это поискал через webpy git и нашел файл utils.py, который был более поздним в https://github.com/webpy/webpy/tree/master/web, загрузил его и использовал для замены того, который был в моей папке Lib / site-packages / web (я пользователь Windows) и это просто сработало.
Надеюсь, это кому-то поможет.
Они исправили эту проблему, просто удалите текущую версию web.py, и я получил сообщение об ошибке при запуске pip install web.py с windows 10. Поэтому я запускаю команду pip install -e git+https://github.com/webpy/webpy.git#egg=webpy, чтобы получить последнюю версию из ветки master. Это не приведет к ошибке RuntimeError: generator raised StopIteration, как упоминалось в вопросе.
Это должно быть исправлено в # 577:
https://github.com/webpy/webpy/pull/577
Мое решение состояло в том, чтобы обновить эти пипсы.
Mongoengine от 0.14.0 к 0.19.1
а также
Flask-mongoengine в 0.9.5
Это сработало.
На данный момент большинство основных пакетов устранили эту проблему, но один из основных пакетов, который не исправлен, — это клипы / выкройка. Он не обновлялся с августа 2018 года, поэтому исправления не было.
Так как это лучший результат Google для «стоп-итерации шаблона Python», вот обходной путь:
def pattern_stopiteration_workaround():
try:
print(lexeme('gave'))
except:
pass
def main():
pattern_stopiteration_workaround()
#Add your other code here
По сути, код, связанный с шаблоном, выйдет из строя только при первом запуске, поэтому вам сначала нужно запустить его один раз и поймать исключение, которое он генерирует.
Он достаточно хорошо работал с моими собственными сценариями, но я не знаю, устраняет ли он все возможные проблемы.
В идеале, однако, кто-то должен разветвить проект клипов / шаблонов, поскольку он больше не поддерживается.
Другие вопросы по теме
Следующие исключения являются исключениями, которые обычно возникают во время исполнения программы.
Содержание:
- Исключение StopIteration
- Исключение StopAsyncIteration
- Исключение ArithmeticError
- Исключение AssertionError
- Исключение AttributeError
- Исключение BufferError
- Исключение EOFError
- Исключение ImportError
- Исключение ModuleNotFoundError
- Исключение LookupError
- Исключение IndexError
- Исключение KeyError
- Исключение MemoryError
- Исключение NameError
- Исключение UnboundLocalError
- Исключение OSError
- Исключение ReferenceError
- Исключение RuntimeError
- Исключение NotImplementedError
- Исключение RecursionError
- Исключение SyntaxError
- Исключение IndentationError
- Исключение TabError
- Исключение SystemError
- Исключение TypeError
- Исключение ValueError
- Исключение UnicodeError
- Исключение EnvironmentError
- Исключение IOError
- Исключение WindowsError
StopIteration
:
Исключение StopIteration
вызывается встроенной функцией next()
и методом итератора __next__()
, чтобы сигнализировать, что итератор больше не производит никаких элементов.
Объект исключения имеет единственный атрибут value
, который задается в качестве аргумента при создании исключения и по умолчанию равен None
.
Когда функция генератора или сопрограммы возвращается, создается новый экземпляр StopIteration
, и значение, возвращаемое функцией, используется в качестве параметра value
для конструктора исключения.
Если код генератора прямо или косвенно поднимает StopIteration
, он преобразуется в RuntimeError
, сохраняя StopIteration
как причину нового исключения.
StopAsyncIteration
:
Исключение StopAsyncIteration
вызывается методом __next__()
объекта асинхронного итератора, чтобы остановить итерацию.
ArithmeticError
:
AssertionError
:
Исключение AssertionError
вызывается когда оператор assert
терпит неудачу.
AttributeError
:
Исключение AttributeError
вызывается при сбое ссылки на атрибут или присвоения. Если объект не поддерживает ссылки на атрибуты или назначения атрибутов вообще, вызывается TypeError
.
BufferError
:
Исключение BufferError
вызывается когда операция, связанная с буфером, не может быть выполнена.
EOFError
:
Исключение EOFError
вызывается когда функция input()
попадает в состояние конца файла без чтения каких-либо данных. Когда методы io.IOBase.read()
and io.IOBase.readline()
возвращают пустую строку при попадании в EOF.
ImportError
:
Исключение ImportError
вызывается когда оператор import
имеет проблемы при попытке загрузить модуль. Также ImportError
поднимается, когда “из списка» в конструкция from ... import
имеет имя, которое не может быть найдено.
Атрибуты name
и path
можно задать с помощью аргументов конструктора, содержащих только ключевые слова. При установке они представляют имя модуля, который был предпринят для импорта, и путь к любому файлу, который вызвал исключение, соответственно.
-
ModuleNotFoundError
:Исключение
ModuleNotFoundError
подклассImportError
, который вызывается операторомimport
, когда модуль не может быть найден. Он также вызывается, когда вsys.modules
имеет значениеNone
.
LookupError
:
Исключение LookupError
— базовый класс для исключений, возникающих при недопустимости ключа или индекса, используемого в сопоставлении или последовательности: IndexError
, KeyError
. Исключение LookupError
может быть вызван непосредственно codecs.lookup()
.
-
IndexError
:Исключение
IndexError
вызывается когда индекс последовательности находится вне диапазона. Индексы среза усекаются без каких либо предупреждений, чтобы попасть в допустимый диапазон. Если индекс не является целым числом, поднимается исключениеTypeError
. -
KeyError
:Исключение
KeyError
вызывается когда ключ сопоставления словаря не найден в наборе существующих ключей.
MemoryError
:
Исключение MemoryError
вызывается, когда операции не хватает памяти, но ситуация все еще может быть спасена путем удаления некоторых объектов. Значение представляет собой строку, указывающую какой внутренней операции не хватило памяти. Обратите внимание, что из-за базовой архитектуры управления памятью интерпретатор не всегда может полностью восстановиться в этой ситуации. Тем не менее, возникает исключение, чтобы можно было напечатать трассировку стека.
NameError
:
Исключение NameError
вызывается, когда локальное или глобальное имя не найдено. Значение — это сообщение об ошибке, содержащее имя, которое не удалось найти.
-
UnboundLocalError
:Исключение
UnboundLocalError
вызывается, когда ссылка сделана на локальную переменную в функции или методе, но никакое значение не было привязано к этой переменной. Это подклассNameError
.
OSError
:
ReferenceError
:
Исключение ReferenceError
вызывается, когда слабый эталонный прокси-сервер, созданный функцией weakref.proxy()
используется для доступа к атрибуту референта после сбора его мусора.
RuntimeError
:
Исключение RuntimeError
вызывается при обнаружении ошибки, которая не попадает ни в одну из других категорий. Связанное значение является строкой, указывающей, что именно пошло не так.
-
NotImplementedError
:Исключение
NotImplementedError
получено изRuntimeError
. В определяемых пользователем базовых классах абстрактные методы должны вызывать это исключение, когда им требуется, чтобы производные классы переопределяли метод, или когда класс разрабатывается, чтобы указать, что реальная реализация все еще должна быть добавлена.Заметки:
- Его не следует использовать для указания того, что оператор или метод вообще не предполагается поддерживать — в этом случае либо оставьте оператор/метод неопределенным, либо, установите его в None.
NotImplementedError
иNotImplemented
не являются взаимозаменяемыми, даже если они имеют схожие имена и цели. Смотрите подробностиNotImplemented
о том, когда его использовать.
-
RecursionError
:Исключение
RecursionError
получено изRuntimeError
. ИсключениеRecursionError
вызывается, когда интерпретатор обнаруживает, что максимальная глубина рекурсииsys.getrecursionlimit()
превышена.
SyntaxError
:
Исключение SyntaxError
вызывается, когда синтаксический анализатор обнаруживает синтаксическую ошибку. Ошибка данного типа может произойти в инструкции import
, при вызове встроенной функции exec()
или eval()
, или при чтении первоначального сценария или стандартный ввода, также в интерактивном режиме.
Экземпляры этого класса имеют атрибуты filename
, lineno
, offset
и text
для облегчения доступа к информации. Функция str()
экземпляра исключения возвращает только сообщение.
-
IndentationError
:Исключение
IndentationError
служит базовым классом для синтаксических ошибок, связанных с неправильным отступом. Это подклассSyntaxError
. -
TabError
:
Исключение TabError
вызывается, когда отступ содержит несоответствующее использование символов табуляции и пробелов. Это подкласс IndentationError
.
SystemError
:
Исключение SystemError
вызывается, когда интерпретатор обнаруживает внутреннюю ошибку, но ситуация не выглядит настолько серьезной, чтобы заставить его отказаться от всякой надежды. Ассоциированное значение — это строка, указывающая, что пошло не так (в терминах низкого уровня).
TypeError
:
Исключение TypeError
вызывается, когда операция или функция применяется к объекту неподходящего типа. Связанное значение представляет собой строку, содержащую сведения о несоответствии типов.
Исключение TypeError
может быть вызвано пользовательским кодом, чтобы указать, что попытка выполнения операции над объектом не поддерживается и не должна поддерживаться. Если объект предназначен для поддержки данной операции, но еще не предоставил реализацию, то вызывайте исключение NotImplementedError
.
Передача аргументов неправильного типа, например передача списка, когда ожидается целое число, должна привести к TypeError
, но передача аргументов с неправильным значением, например число вне ожидаемых границ, должна привести к ValueError
.
ValueError
:
Исключение ValueError
вызывается, когда операция или функция получает аргумент, который имеет правильный тип, но недопустимое значение, и ситуация не описывается более точным исключением, таким как IndexError
.
UnicodeError
:
EnvironmentError
:
Доступно только в Windows.
IOError
:
Доступно только в Windows.
WindowsError
:
Доступно только в Windows.