diff options
author | Thomas Kluyver <takowl@gmail.com> | 2017-10-24 12:42:36 (GMT) |
---|---|---|
committer | Yury Selivanov <yury@magic.io> | 2017-10-24 12:42:36 (GMT) |
commit | e968bc735794a7123f28f26d68fdf5dc8c845280 (patch) | |
tree | be1afebab108ab43fec3d577fe4be021278f7801 | |
parent | 8e482bea21cb942804234e36d3c6c896aabd32da (diff) | |
download | cpython-e968bc735794a7123f28f26d68fdf5dc8c845280.zip cpython-e968bc735794a7123f28f26d68fdf5dc8c845280.tar.gz cpython-e968bc735794a7123f28f26d68fdf5dc8c845280.tar.bz2 |
bpo-30639: Lazily compute repr for error (#2132)
-rw-r--r-- | Lib/inspect.py | 5 | ||||
-rw-r--r-- | Lib/test/test_inspect.py | 8 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2017-10-24-12-24-56.bpo-30639.ptNM9a.rst | 2 |
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. |