弃用

计划在 Python 3.13 中移除

模块 (参见 PEP 594):

其他模块:

  • lib2to3,以及 2to3 程序 (gh-84540)

API:

计划在 Python 3.14 中移除

Python 3.15 中的待移除功能

  • http.server.CGIHTTPRequestHandler 将同 python -m http.server 中与其相关的 --cgi 旗标一起被移除。 它已经过时并且很少被使用。 不存在直接的替代品。 对于建立 Web 服务器与请求处理器的接口的任务来说 任何东西 都比 CGI 要好。

  • locale: locale.getdefaultlocale() 在 Python 3.11 中已被弃用并且原计划在 Python 3.13 中移除 (gh-90817),但移除时间已被推迟至 Python 3.15。 请改用 locale.setlocale(), locale.getencoding()locale.getlocale()。 (由 Hugo van Kemenade 在 gh-111187 中贡献。)

  • pathlibpathlib.PurePath.is_reserved() 已被弃用,并计划在 Python 3.15 中移除。从 Python 3.13 起,请在 Windows 上使用``os.path.isreserved`` 检测保留路径。

  • platform: java_ver() 已被弃用并将在 3.15 中移除。 它几乎未经测试,具有令人困惑的 API,并且仅适用于 Jython 支持。 (由 Nikita Sobolev 在 gh-116349 中贡献。)

  • threading: 向 threading.RLock() 传入任意参数的做法现已被弃用。 C 版本允许任意数量的 args 和 kwargs,但它们都会被忽略。 Python 版本不允许任何参数。 在 Python 3.15 中将从 threading.RLock() 移除所有参数。 (由 Nikita Sobolev 在 gh-102029 中贡献。)

  • typing.NamedTuple:

    • 创建 NamedTuple 类 (NT = NamedTuple("NT", x=int)) 的关键字参数语法从未写入文档且已被弃用,并将在 3.15 中被禁止。 请改用基于类的语法或函数语法。

  • types:

  • typing:

    • 当使用函数式语法创建 NamedTuple 类时,不向 fields 形参传值的做法 (NT = NamedTuple("NT")) 已被弃用。 将 None 传给 fields 形参的做法 (NT = NamedTuple("NT", None)) 也已被弃用。 两者都将在 Python 3.15 中被禁止。 要创建拥有 0 个字段的 NamedTuple 类,请使用 class NT(NamedTuple): passNT = NamedTuple("NT", [])

  • typing.TypedDict: 当使用函数语法创建 TypedDict 类时,不向 fields 形参传值 (TD = TypedDict("TD")) 的行为已被弃用。 将 None 传给 fields 形参 (TD = TypedDict("TD", None)) 的行为也已被弃用。 两者都将在 Python 3.15 中被禁止。 要创建拥有 0 个字段的 TypedDict 类,请使用 class TD(TypedDict): passTD = TypedDict("TD", {})

  • wave: 已弃用 wave.Wave_readwave.Wave_write 类的 getmark(), setmark()getmarkers() 方法。 它们将在 Python 3.15 中被移除。 (由 Victor Stinner 在 gh-105096 中贡献。)

计划在 Python 3.16 中移除

  • The import system:

    • Setting __loader__ on a module while failing to set __spec__.loader is deprecated. In Python 3.16, __loader__ will cease to be set or taken into consideration by the import system or the standard library.

  • array: array.array 'u' 类型 (wchar_t): 改用 'w' 类型 (Py_UCS4)。

  • builtins: ~bool,对布尔值按位取反。

  • symtable: symtable.Class.get_methods() 因缺少适当的场景已被弃用。 (由 Bénédikt Tran 在 gh-119698 中贡献。)

计划在未来版本中移除

以下API将会被移除,尽管具体时间还未确定。

  • argparse: 嵌套参数分组和嵌套互斥分组的做法已被弃用。

  • array'u' 格式代码 (gh-57281)

  • builtins:

    • bool(NotImplemented)

    • 生成器: throw(type, exc, tb)athrow(type, exc, tb) 签名已被弃用:请改用 throw(exc)athrow(exc),即单参数签名。

    • 目前 Python 接受数字类字面值后面紧跟关键字的写法,例如 0in x, 1or x, 0if 1else 2。 它允许像 [0x1for x in y] 这样令人困惑且有歧义的表达式 (它可以被解读为 [0x1 for x in y] 或者 [0x1f or x in y])。 如果数字类字面值后面紧跟关键字 and, else, for, if, in, isor 中的一个将会引发语法警告。 在未来的版本中它将改为语法错误。 (gh-87999)

    • __index__()__int__() 方法返回非 int 类型的支持:将要求这些方法必须返回 int 的子类的实例。

    • __float__() 方法返回 float 的子类的支持:将要求这些方法必须返回 float 的实例。

    • __complex__() 方法返回 complex 的子类的支持:将要求这些方法必须返回 complex 的实例。

    • int() 委托给 __trunc__() 方法。

    • 传入一个复数作为 complex() 构造器中的 realimag 参数的做法现在已被弃用;它应当仅作为单个位置参数被传入。 (由 Serhiy Storchaka 在 gh-109218 中贡献。).)

  • calendar: calendar.Januarycalendar.February 常量已被弃用并由 calendar.JANUARYcalendar.FEBRUARY 替代。 (由 Prince Roshan 在 gh-103636 中贡献。)

  • codeobject.co_lnotab: 改用 codeobject.co_lines() 方法。

  • datetime:

    • utcnow(): 使用 datetime.datetime.now(tz=datetime.UTC)

    • utcfromtimestamp(): 使用 datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)

  • gettext: 复数值必须是一个整数。

  • importlib:

    • load_module() 方法:改用 exec_module()

    • cache_from_source() debug_override 形参已被弃用:改用 optimization 形能耐。

  • importlib.metadata:

    • EntryPoints 元组接口。

    • 返回值中隐式的 None

  • mailbox: 对 StringIO 输入和文本模式的使用已被弃用,改用 BytesIO 和二进制模式。

  • os: 在多线程的进程中调用 os.register_at_fork()

  • pydoc.ErrorDuringImport: 使用元组值作为 exc_info 形参的做法已被弃用,应使用异常实例。

  • re: 现在对于正则表达式中的数字分组引用和分组名称将应用更严格的规则。 现在只接受 ASCII 数字序列作为数字引用。 字节串模式和替换字符串中的分组名称现在只能包含 ASCII 字母和数字以及下划线。 (由 Serhiy Storchaka 在 gh-91760 中贡献。)

  • sre_compile, sre_constantssre_parse 模块。

  • shutil: rmtree()onerror 形参在 Python 3.12 中已被弃用;请改用 onexc 形参。

  • ssl 选项和协议:

    • ssl.SSLContext 不带 protocol 参数的做法已被弃用。

    • ssl.SSLContext: set_npn_protocols()selected_npn_protocol() 已被弃用:请改用 ALPN.

    • ssl.OP_NO_SSL* 选项

    • ssl.OP_NO_TLS* 选项

    • ssl.PROTOCOL_SSLv3

    • ssl.PROTOCOL_TLS

    • ssl.PROTOCOL_TLSv1

    • ssl.PROTOCOL_TLSv1_1

    • ssl.PROTOCOL_TLSv1_2

    • ssl.TLSVersion.SSLv3

    • ssl.TLSVersion.TLSv1

    • ssl.TLSVersion.TLSv1_1

  • sysconfig.is_python_build() check_home 形参已被弃用并会被忽略。

  • threading 的方法:

  • typing.Text (gh-92332)。

  • unittest.IsolatedAsyncioTestCase: 从测试用例返回不为 None 的值的做法已被弃用。

  • urllib.parse 函数已被弃用:改用 urlparse()

    • splitattr()

    • splithost()

    • splitnport()

    • splitpasswd()

    • splitport()

    • splitquery()

    • splittag()

    • splittype()

    • splituser()

    • splitvalue()

    • to_bytes()

  • urllib.request: 发起请求的 URLopenerFancyURLopener 方式已被弃用。 改用更新 urlopen() 函数和方法。

  • wsgiref: SimpleHandler.stdout.write() 不应执行部分写入。

  • xml.etree.ElementTree: 对 Element 的真值测试已被弃用。 在未来的发布版中它将始终返回 True。 建议改用显式的 len(elem)elem is not None 测试。

  • zipimport.zipimporter.load_module() 已被弃用:请改用 exec_module()

C API 的弃用项

计划在 Python 3.14 中移除

Python 3.15 中的待移除功能

计划在未来版本中移除

以下 API 已被弃用,将被移除,但目前尚未确定移除日期。