summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Kluyver <takowl@gmail.com>2017-10-24 12:42:36 (GMT)
committerYury Selivanov <yury@magic.io>2017-10-24 12:42:36 (GMT)
commite968bc735794a7123f28f26d68fdf5dc8c845280 (patch)
treebe1afebab108ab43fec3d577fe4be021278f7801
parent8e482bea21cb942804234e36d3c6c896aabd32da (diff)
downloadcpython-e968bc735794a7123f28f26d68fdf5dc8c845280.zip
cpython-e968bc735794a7123f28f26d68fdf5dc8c845280.tar.gz
cpython-e968bc735794a7123f28f26d68fdf5dc8c845280.tar.bz2
bpo-30639: Lazily compute repr for error (#2132)
-rw-r--r--Lib/inspect.py5
-rw-r--r--Lib/test/test_inspect.py8
-rw-r--r--Misc/NEWS.d/next/Library/2017-10-24-12-24-56.bpo-30639.ptNM9a.rst2
3 files changed, 13 insertions, 2 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py
index 9a843d6..6d6fde9 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -662,8 +662,9 @@ def getfile(object):
object = object.f_code
if iscode(object):
return object.co_filename
- raise TypeError('{!r} is not a module, class, method, '
- 'function, traceback, frame, or code object'.format(object))
+ raise TypeError('module, class, method, function, traceback, frame, or '
+ 'code object was expected, got {}'.format(
+ type(object).__name__))
def getmodulename(path):
"""Return the module name for a given file, or None."""
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index 819fcc5..e64215d 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -463,6 +463,14 @@ class TestRetrievingSourceCode(GetSourceBase):
with self.assertRaises(TypeError):
inspect.getfile(C)
+ def test_getfile_broken_repr(self):
+ class ErrorRepr:
+ def __repr__(self):
+ raise Exception('xyz')
+ er = ErrorRepr()
+ with self.assertRaises(TypeError):
+ inspect.getfile(er)
+
def test_getmodule_recursion(self):
from types import ModuleType
name = '__inspect_dummy'
diff --git a/Misc/NEWS.d/next/Library/2017-10-24-12-24-56.bpo-30639.ptNM9a.rst b/Misc/NEWS.d/next/Library/2017-10-24-12-24-56.bpo-30639.ptNM9a.rst
new file mode 100644
index 0000000..c6aeb23
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2017-10-24-12-24-56.bpo-30639.ptNM9a.rst
@@ -0,0 +1,2 @@
+:func:`inspect.getfile` no longer computes the repr of unknown objects to
+display in an error message, to protect against badly behaved custom reprs.