Porting to Python 3¶
Introduction¶
Twisted currently supports only Python 3.6+. This document covers Twisted-specific issues in porting your code to Python 3.
API Differences¶
twisted.python.failure¶
Failure.trap
raises itself (i.e. a Failure
) in Python 2. In Python 3,
the wrapped exception will be re-raised.
Byte Strings and Text Strings¶
Several APIs which on Python 2 accepted or produced byte strings
(instances of str
, sometimes just called bytes ) have
changed to accept or produce text strings (instances of str
,
sometimes just called text or unicode ) on Python 3.
From twisted.internet.address
, the IPv4Address
and IPv6Address
classes have had two attributes change from
byte strings to text strings: type
and host
.
twisted.python.log
has shifted significantly towards text
strings from byte strings. Logging events, particular those produced by a
call like msg("foo")
, must now be text strings. Consequently,
on Python 3, event dictionaries passed to log observes will contain text
strings where they previously contained byte strings.
twisted.python.runtime.platformType
and the return value
from twisted.python.runtime.Platform.getType
are now both text
strings.
twisted.python.filepath.FilePath
has not changed.
It supports only byte strings. This will probably require applications to
update their usage of FilePath
, at least to pass explicit byte
string literals rather than “native” string literals (which are text on
Python 3).
reactor.addSystemEventTrigger
arguments that were
previously byte strings are now native strings.
twisted.names.dns
deals with strings with a wide range of
meanings, often several for each DNS record type. Most of these strings
have remained as byte strings, which will probably require application
updates (for the reason given in the FilePath
section above).
Some strings have changed to text strings, though. Any string representing
a human readable address (for
example, Record_A
‘s address
parameter) is now a
text string. Additionally, time-to-live (ttl) values given as strings must
now be given as text strings.
twisted.web.resource.IResource
continues to deal with URLs
and all URL-derived values as byte strings.
twisted.web.resource.ErrorPage
has several string attributes
(template
, brief
, and detail
) which
were previously byte strings. On Python 3 only, these must now be text
strings.