summaryrefslogtreecommitdiff
path: root/_pytest/_code/code.py
diff options
context:
space:
mode:
authorMartin Prusse <prusse@esss.com.br>2016-04-08 11:24:12 -0300
committerMartin Prusse <prusse@esss.com.br>2016-04-08 23:32:18 -0300
commit7ce5873da23ea0dc6f796c4d608731e25191d756 (patch)
treed2ce87bd026ad46496c28e64388d6b34e89a562c /_pytest/_code/code.py
parent0eb80bcb5a6fb30e352960b2081a7307d8bc6e39 (diff)
downloadpytest-7ce5873da23ea0dc6f796c4d608731e25191d756.tar.gz
Perform a "unicode aware" check for maximum recursion depth error
Avoid errors `UnicodeErrosr`s due non maximum recursion depth errors when checking for those errors.
Diffstat (limited to '_pytest/_code/code.py')
-rw-r--r--_pytest/_code/code.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/_pytest/_code/code.py b/_pytest/_code/code.py
index bc68aac55..31a3eda2d 100644
--- a/_pytest/_code/code.py
+++ b/_pytest/_code/code.py
@@ -579,9 +579,8 @@ class FormattedExcinfo(object):
if self.tbfilter:
traceback = traceback.filter()
recursionindex = None
- if excinfo.errisinstance(RuntimeError):
- if "maximum recursion depth exceeded" in str(excinfo.value):
- recursionindex = traceback.recursionindex()
+ if is_recursion_error(excinfo):
+ recursionindex = traceback.recursionindex()
last = traceback[-1]
entries = []
extraline = None
@@ -793,3 +792,14 @@ def getrawcode(obj, trycall=True):
return x
return obj
+if sys.version_info[:2] >= (3, 5): # RecursionError introduced in 3.5
+ def is_recursion_error(excinfo):
+ return excinfo.errisinstance(RecursionError) # noqa
+else:
+ def is_recursion_error(excinfo):
+ if not excinfo.errisinstance(RuntimeError):
+ return False
+ try:
+ return "maximum recursion depth exceeded" in str(excinfo.value)
+ except UnicodeError:
+ return False