弃用

计划在 Python 3.14 中移除

计划在 Python 3.15 中移除

  • 导入系统

    • 在模块上设置 __cached__ 但未设置 __spec__.cached 已被弃用。在 Python 3.15 中,导入系统或标准库将不再设置或考虑 __cached__。( gh-97879 )

    • 在模块上设置 __package__ 但未设置 __spec__.parent 已被弃用。在 Python 3.15 中,导入系统或标准库将不再设置或考虑 __package__。( gh-97879 )

  • ctypes:

    • 未文档化的 ctypes.SetPointerType() 函数自 Python 3.13 起已被弃用。

  • http.server:

    • 过时且很少使用的 CGIHTTPRequestHandler 自 Python 3.13 起已被弃用。没有直接的替代品。任何方法都比 CGI 更好,可以将 Web 服务器与请求处理程序连接起来。

    • python -m http.server 命令行接口的 --cgi 标志自 Python 3.13 起已被弃用。

  • locale:

  • pathlib:

  • platform:

    • java_ver() 自 Python 3.13 起已被弃用。此函数仅对 Jython 支持有用,具有令人困惑的 API,并且很大程度上未经测试。

  • threading:

    • RLock() 在 Python 3.15 中将不接受任何参数。自 Python 3.14 起,传递任何参数都已被弃用,因为 Python 版本不允许任何参数,但 C 版本允许任意数量的位置或关键字参数,并忽略每个参数。

  • types:

  • typing:

    • 用于创建 NamedTuple 类的未文档化的关键字参数语法 (例如 Point = NamedTuple("Point", x=int, y=int)) 自 Python 3.13 起已被弃用。请改用基于类的语法或函数式语法。

    • typing.no_type_check_decorator() 装饰器函数自 Python 3.13 起已被弃用。在 typing 模块中八年后,它尚未获得任何主要类型检查器的支持。

  • wave:

计划在 Python 3.16 中移除

  • 导入系统

    • 在模块上设置 __loader__ 但未设置 __spec__.loader 已被弃用。在 Python 3.16 中,导入系统或标准库将不再设置或考虑 __loader__

  • array:

    • 'u' 格式代码 (wchar_t) 自 Python 3.3 起在文档中被弃用,自 Python 3.13 起在运行时被弃用。请改用 'w' 格式代码 (Py_UCS4) 来表示 Unicode 字符。

  • asyncio:

  • builtins:

    • 对布尔类型进行按位取反,即 ~True~False 自 Python 3.12 起已被弃用,因为它会产生令人惊讶且不直观的结果 (-2-1)。请改用 not x 来表示布尔值的逻辑否定。在极少数需要底层整数的按位取反的情况下,请显式转换为 int ( ~int(x) )。

  • shutil:

    • ExecError 异常自 Python 3.14 起已被弃用。自 Python 3.4 起,shutil 中的任何函数都未使用它,现在它是 RuntimeError 的别名。

  • symtable:

  • sys:

  • tarfile:

    • 未记录且未使用的 TarFile.tarfile 属性自 Python 3.13 起已被弃用。

未来版本中待移除

以下 API 将在未来被移除,尽管目前尚未确定移除的日期。

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

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

  • builtins:

    • bool(NotImplemented).

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

    • 目前,Python 接受紧跟关键字的数字字面量,例如 0in x1or x0if 1else 2。它允许像 [0x1for x in y] 这样令人困惑和模棱两可的表达式(可以解释为 [0x1 for x in y][0x1f or x in y])。如果数字字面量紧跟关键字 andelseforifinisor 中的一个,则会引发语法警告。在未来的版本中,它将被更改为语法错误。( 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

  • logging: warn() 方法自 Python 3.3 起已被弃用,请改用 warning()

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

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

  • pydoc.ErrorDuringImport: exc_info 参数的元组值已被弃用,请使用异常实例。

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

  • sre_compilesre_constantssre_parse 模块。

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

  • ssl 选项和协议

    • 没有协议参数的 ssl.SSLContext 已被弃用。

    • 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() 函数和方法。

  • wsgirefSimpleHandler.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 已弃用,将被移除,尽管目前尚未确定移除日期。