changeset: 76497:2a35dfbe3d99 branch: 3.2 parent: 76493:26631c56d81f user: R David Murray date: Mon Apr 23 13:23:57 2012 -0400 files: Lib/pydoc.py Lib/test/test_pydoc.py Misc/NEWS description: #14638: pydoc now treats non-str __name__ as None instead of raising Original patch by Peter Otten. diff -r 26631c56d81f -r 2a35dfbe3d99 Lib/pydoc.py --- a/Lib/pydoc.py Mon Apr 23 23:53:16 2012 +0800 +++ b/Lib/pydoc.py Mon Apr 23 13:23:57 2012 -0400 @@ -1525,7 +1525,8 @@ 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, renderer=None): diff -r 26631c56d81f -r 2a35dfbe3d99 Lib/test/test_pydoc.py --- a/Lib/test/test_pydoc.py Mon Apr 23 23:53:16 2012 +0800 +++ b/Lib/test/test_pydoc.py Mon Apr 23 13:23:57 2012 -0400 @@ -282,6 +282,17 @@ 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 = str(run_pydoc(missing_module), 'ascii') diff -r 26631c56d81f -r 2a35dfbe3d99 Misc/NEWS --- a/Misc/NEWS Mon Apr 23 23:53:16 2012 +0800 +++ b/Misc/NEWS Mon Apr 23 13:23:57 2012 -0400 @@ -50,6 +50,9 @@ 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.

AltStyle によって変換されたページ (->オリジナル) /