移植到 Python 3¶
简介¶
Twisted 目前仅支持 Python 3.6+。本文档介绍将代码移植到 Python 3 时 Twisted 特定的问题。
API 差异¶
twisted.python.failure¶
Failure.trap
在 Python 2 中会引发自身(即 Failure
)。在 Python 3 中,将重新引发包装的异常。
字节字符串和文本字符串¶
在 Python 2 中接受或生成字节字符串(str
的实例,有时称为 字节)的几个 API 在 Python 3 中已更改为接受或生成文本字符串(str
的实例,有时称为 文本 或 unicode)。
从 twisted.internet.address
中,IPv4Address
和 IPv6Address
类有两个属性已从字节字符串更改为文本字符串:type
和 host
。
twisted.python.log
已从字节字符串大幅转向文本字符串。日志事件,特别是通过类似 msg("foo")
的调用生成的事件,现在必须是文本字符串。因此,在 Python 3 中,传递给日志观察者的事件字典将包含文本字符串,而以前包含字节字符串。
twisted.python.runtime.platformType
和 twisted.python.runtime.Platform.getType
的返回值现在都是文本字符串。
twisted.python.filepath.FilePath
没有改变。它只支持字节字符串。这可能需要应用程序更新它们对 FilePath
的使用,至少要传递显式的字节字符串字面量,而不是“原生”字符串字面量(在 Python 3 中是文本)。
reactor.addSystemEventTrigger
中以前是字节字符串的参数现在是原生字符串。
twisted.names.dns
处理具有多种含义的字符串,每个 DNS 记录类型通常有多种含义。这些字符串中的大多数仍然是字节字符串,这可能需要应用程序更新(如上文 FilePath
部分中所述)。不过,一些字符串已更改为文本字符串。任何表示人类可读地址的字符串(例如,Record_A
的 address
参数)现在都是文本字符串。此外,作为字符串给出的生存时间 (ttl) 值现在必须作为文本字符串给出。
twisted.web.resource.IResource
继续将 URL 和所有从 URL 派生的值视为字节字符串。
twisted.web.resource.ErrorPage
有几个字符串属性(template
、brief
和 detail
),这些属性以前是字节字符串。在 Python 3 中,这些属性现在必须是文本字符串。