Merge pull request #2487 from nicoddemus/recursion-error-2486
Fix internal error when trying to detect the start of a recursive traceback
This commit is contained in:
commit
5e832017d5
|
@ -640,8 +640,11 @@ class FormattedExcinfo(object):
|
||||||
).format(exc_type=type(e).__name__, exc_msg=safe_str(e), max_frames=max_frames, total=len(traceback))
|
).format(exc_type=type(e).__name__, exc_msg=safe_str(e), max_frames=max_frames, total=len(traceback))
|
||||||
traceback = traceback[:max_frames] + traceback[-max_frames:]
|
traceback = traceback[:max_frames] + traceback[-max_frames:]
|
||||||
else:
|
else:
|
||||||
|
if recursionindex is not None:
|
||||||
extraline = "!!! Recursion detected (same locals & position)"
|
extraline = "!!! Recursion detected (same locals & position)"
|
||||||
traceback = traceback[:recursionindex + 1]
|
traceback = traceback[:recursionindex + 1]
|
||||||
|
else:
|
||||||
|
extraline = None
|
||||||
|
|
||||||
return traceback, extraline
|
return traceback, extraline
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fix internal error when trying to detect the start of a recursive traceback.
|
|
@ -1,6 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import absolute_import, division, print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
|
import sys
|
||||||
import operator
|
import operator
|
||||||
import _pytest
|
import _pytest
|
||||||
import py
|
import py
|
||||||
|
@ -1173,3 +1174,25 @@ def test_exception_repr_extraction_error_on_recursion():
|
||||||
'*The following exception happened*',
|
'*The following exception happened*',
|
||||||
'*ValueError: The truth value of an array*',
|
'*ValueError: The truth value of an array*',
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
def test_no_recursion_index_on_recursion_error():
|
||||||
|
"""
|
||||||
|
Ensure that we don't break in case we can't find the recursion index
|
||||||
|
during a recursion error (#2486).
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
class RecursionDepthError(object):
|
||||||
|
def __getattr__(self, attr):
|
||||||
|
return getattr(self, '_' + attr)
|
||||||
|
|
||||||
|
RecursionDepthError().trigger
|
||||||
|
except:
|
||||||
|
from _pytest._code.code import ExceptionInfo
|
||||||
|
exc_info = ExceptionInfo()
|
||||||
|
if sys.version_info[:2] == (2, 6):
|
||||||
|
assert "'RecursionDepthError' object has no attribute '___" in str(exc_info.getrepr())
|
||||||
|
else:
|
||||||
|
assert 'maximum recursion' in str(exc_info.getrepr())
|
||||||
|
else:
|
||||||
|
assert 0
|
||||||
|
|
Loading…
Reference in New Issue