From b553c23ab1cadfe75db6637ca95daa11abc87049 Mon Sep 17 00:00:00 2001 From: Michel Alexandre Salim Date: Tue, 3 Jul 2018 09:28:54 -0700 Subject: [PATCH] Closes #5076: [ext/napoleon] explicitly catch StopIteration (#5119) * Closes #5076: [ext/napoleon] explicitly catch StopIteration Per PEP 479, Python 3.7 no longer allows bubbling up StopIteration outside of a generator. Instead, wrap attribute parsing in a try block and provide a sane default in case it raises an exception ([]). * Fix mypy and flake8 issues --- sphinx/ext/napoleon/docstring.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sphinx/ext/napoleon/docstring.py b/sphinx/ext/napoleon/docstring.py index b349c761f..64107d8fb 100644 --- a/sphinx/ext/napoleon/docstring.py +++ b/sphinx/ext/napoleon/docstring.py @@ -527,7 +527,14 @@ class GoogleDocstring(UnicodeMixin): self._parsed_lines = self._consume_empty() if self._name and (self._what == 'attribute' or self._what == 'data'): - self._parsed_lines.extend(self._parse_attribute_docstring()) + # Implicit stop using StopIteration no longer allowed in + # Python 3.7; see PEP 479 + res = [] # type: List[unicode] + try: + res = self._parse_attribute_docstring() + except StopIteration: + pass + self._parsed_lines.extend(res) return while self._line_iter.has_next():