diff options
author | R David Murray <rdmurray@bitdance.com> | 2012-04-23 17:27:11 (GMT) |
---|---|---|
committer | R David Murray <rdmurray@bitdance.com> | 2012-04-23 17:27:11 (GMT) |
commit | c313b1d9b0a8afe47fdd58d4685fa3d19ab79e57 (patch) | |
tree | a12e865512bc2ca67378b75c1aa0588737d5875d | |
parent | 4c20c4e198b0a87f94a814d891ef18bf2d49864a (diff) | |
download | cpython-c313b1d9b0a8afe47fdd58d4685fa3d19ab79e57.zip cpython-c313b1d9b0a8afe47fdd58d4685fa3d19ab79e57.tar.gz cpython-c313b1d9b0a8afe47fdd58d4685fa3d19ab79e57.tar.bz2 |
#14638: pydoc now treats non-str __name__ as None instead of raising
Original patch by Peter Otten.
-rwxr-xr-x | Lib/pydoc.py | 3 | ||||
-rw-r--r-- | Lib/test/test_pydoc.py | 11 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 16 insertions, 1 deletions
diff --git a/Lib/pydoc.py b/Lib/pydoc.py index 674af6a..68ba21f 100755 --- a/Lib/pydoc.py +++ b/Lib/pydoc.py @@ -1498,7 +1498,8 @@ def resolve(thing, forceload=0): raise ImportError, 'no Python documentation found for %r' % thing return object, thing else: - return thing, getattr(thing, '__name__', None) + name = getattr(thing, '__name__', None) + return thing, name if isinstance(name, str) else None def render_doc(thing, title='Python Library Documentation: %s', forceload=0): """Render text documentation, given an object or a path to an object.""" diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py index 59cbffe..d95e706 100644 --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -249,6 +249,17 @@ class PyDocDocTest(unittest.TestCase): result, doc_loc = get_pydoc_text(xml.etree) self.assertEqual(doc_loc, "", "MODULE DOCS incorrectly includes a link") + def test_non_str_name(self): + # issue14638 + # Treat illegal (non-str) name like no name + class A: + __name__ = 42 + class B: + pass + adoc = pydoc.render_doc(A()) + bdoc = pydoc.render_doc(B()) + self.assertEqual(adoc.replace("A", "B"), bdoc) + def test_not_here(self): missing_module = "test.i_am_not_here" result = run_pydoc(missing_module) @@ -50,6 +50,9 @@ Core and Builtins Library ------- +- Issue #14638: pydoc now treats non-string __name__ values as if they + were missing, instead of raising an error. + - Issue #13684: Fix httplib tunnel issue of infinite loops for certain sites which send EOF without trailing \r\n. |