目录

Python3.x和Python2.x版本兼容问题

Python3.x和Python2.x版本兼容问题

Python3.x和Python2.x版本兼容问题

重组和重命名标准库 为了一致性和使用起来更容易,Python的标准库在Python 3已经被重组了。所有的模块名现在符合Python代码的风格引导,PEP 8 ;并且一些模块被合并了。 2to3 包含的固定器可以处理所有的这些,所以这个章节更多的是引起你是否需要不用2to3转换同时支持Python 2和Python 3的兴趣。 six模块 对大多数重组的标准库的整合都有支持。你可以从six.moves导入重组的模块: >>> from six.moves import cStringIO 在Python 2这等效于: >>> from cStringIO import StringIO 然而在Python 3这将等效于: >>> from io import StringIO 如果你想要不用转换并且不想用six模块同时Python 2和Python 3,这也是很容易的。你只需要偿试从一个位置导入,捕捉错误然后从其他位置导入。它和你放Python 3的位置在前或者在后没有关系,都可以同样很好地起作用: >>> try: ...     from io import StringIO ... except ImportError: ...     from cStringIO import StringIO 这个表格包含除了另外列出表格的urllib、urllib2 和urlparse重组外的所有标准库的重命名和重组:Python 2 名字Python 3 名字six名字anydbmdbmBaseHTTPServerhttp.serverBaseHTTPServerbuiltinbuiltinsbuiltinsCGIHTTPServerhttp.serverCGIHTTPServerConfigParserconfigparserconfigparsercopy_regcopyregcopyregcPicklepicklecPicklecProfileprofilecStringIO.StringIOio.StringIOcStringIOCookiehttp.cookieshttp_cookiescookielibhttp.cookiejarhttp_cookiejardbhashdbm.bsddbmdbm.ndbmdumbdbdbm.dumbDialogtkinter.dialogtkinter_dialogDocXMLRPCServerxmlrpc.serverFileDialogtkinter.FileDialogtkinter_filedialogFixTktkinter._fixgdbmdbm.gnuhtmlentitydefshtml.entitieshtml_entitiesHTMLParserhtml.parserhtml_parserhttplibhttp.clienthttp_clientmarkupbase_markupbaseQueuequeuequeuereprreprlibreprlibrobotparserurllib.robotparserurllib_robotparserScrolledTexttkinter.scolledtexttkinter_scrolledtextSimpleDialogtkinter.simpledialogtkinter_simpledialogSimpleHTTPServerhttp.serverSimpleHTTPServerSimpleXMLRPCServerxmlrpc.serverStringIO.StringIOio.StringIOSocketServersocketserversocketservertest.test_supporttest.supporttkinterTkintertkintertkinterTixtkinter.tixtkinter_tixTkconstantstkinter.constantstkinter_constantstkColorChoosertkinter.colorchoosertkinter_colorchoosertkCommonDialogtkinter.commondialogtkinter_commondialogTkdndtkinter.dndtkinter_dndtkFileDialogtkinter.filedialogtkinter_tkfiledialogtkFonttkinter.fonttkinter_fonttkMessageBoxtkinter.messageboxtkinter_messageboxtkSimpleDialogtkinter.simpledialogtkinter_tksimpledialogturtletkinter.turtleUserListcollectionsUserStringcollectionswhichdbdbm_winregwinregwinregxmlrpclibxmlrpc.clienturllib、urllib2和urlparse urllib、urllib2和urlparse这三个模块被重组进了urllib.request、urllib.parse和urllib.error这三个新的模块。因为没有six的支持,所有你必须要使用前面提到的try/except技巧。Python 2 名字移动到urllib._urlopenerurllib.requesturllib.ContentTooShortErrorurllib.errorurllib.FancyURLOpenerurllib.requesturllib.pathname2urlurllib.requesturllib.quoteurllib.parseurllib.quote_plusurllib.parseurllib.splitattrurllib.parseurllib.splithosturllib.parseurllib.splitnporturllib.parseurllib.splitpasswdurllib.parseurllib.splitporturllib.parseurllib.splitqueryurllib.parseurllib.splittagurllib.parseurllib.splittypeurllib.parseurllib.splituserurllib.parseurllib.splitvalueurllib.parseurllib.unquoteurllib.parseurllib.unquote_plusurllib.parseurllib.urlcleanupurllib.requesturllib.urlencodeurllib.parseurllib.urlopenurllib.requesturllib.URLOpenerurllib.requesturllib.urlretrieveurllib.requesturllib2.AbstractBasicAuthHandlerurllib.requesturllib2.AbstractDigestAuthHandlerurllib.requesturllib2.BaseHandlerurllib.requesturllib2.build_openerurllib.requesturllib2.CacheFTPHandlerurllib.requesturllib2.FileHandlerurllib.requesturllib2.FTPHandlerurllib.requesturllib2.HTTPBasicAuthHandlerurllib.requesturllib2.HTTPCookieProcessorurllib.requesturllib2.HTTPDefaultErrorHandlerurllib.requesturllib2.HTTPDigestAuthHandlerurllib.requesturllib2.HTTPErrorurllib.requesturllib2.HTTPHandlerurllib.requesturllib2.HTTPPasswordMgrurllib.requesturllib2.HTTPPasswordMgrWithDefaultRealmurllib.requesturllib2.HTTPRedirectHandlerurllib.requesturllib2.HTTPSHandlerurllib.requesturllib2.install_openerurllib.requesturllib2.OpenerDirectorurllib.requesturllib2.ProxyBasicAuthHandlerurllib.requesturllib2.ProxyDigestAuthHandlerurllib.requesturllib2.ProxyHandlerurllib.requesturllib2.Requesturllib.requesturllib2.UnknownHandlerurllib.requesturllib2.URLErrorurllib.requesturllib2.urlopenurllib.requesturlparse.parse_qsurllib.parseurlparse.parse_qslurllib.parseurlparse.urldefragurllib.parseurlparse.urljoinurllib.parseurlparse.urlparseurllib.parseurlparse.urlspliturllib.parseurlparse.urlunparseurllib.parseurlparse.urlunspliturllib.parse移除的模块 一些标准库模块已经被丢弃。UserDict是一个,但这些类中的一部分有一些差不多的替代品,但不是完全的兼容。更多信息见 。 大多数其他被丢弃的模块都是些已经被替换掉很长久的模块,或者是一些给支持时期不长的特殊平台的模块。这个规则适用并例外的是异常模块。它包含异常的等级,但所有它们也是内置的,所以你从来都不需要从异常模块导入任何东西。因此它已经在Python 3被完全移除了。 除了给Solaris、RIX和Mac OS 9的特殊模块,在Python 3中被移除模块列表:模块名注释