已棄用項目

Python 3.14 中待移除的項目

Python 3.15 中待移除的項目

  • 引入系統 (import system):

    • 在模組上設定 __cached__ 而沒有設定 __spec__.cached 的做法已被棄用。在 Python 3.15 中,引入系統或標準函式庫將不再設定或考慮 __cached__。(gh-97879)

    • 在模組上設定 __package__ 而沒有設定 __spec__.parent 的做法已被棄用。在 Python 3.15 中,引入系統或標準函式庫將不再設定或考慮 __package__。(gh-97879)

  • ctypes

    • 自 Python 3.13 起,未記錄的 ctypes.SetPointerType() 函式已被棄用。

  • http.server

    • 過時且很少使用的 CGIHTTPRequestHandler 自 Python 3.13 起已被棄用。不存在直接的替代。任何東西都比 CGI 更好地將 Web 伺服器與請求處理程序介接起來。

    • 自 Python 3.13 起,python -m http.server 命令列介面的 --cgi 旗標已被棄用。

  • importlib

    • load_module() method:請改用 exec_module()

  • locale

  • pathlib

  • platform

    • 自 Python 3.13 起,java_ver() 已被棄用。此函式僅對 Jython 支援有用,具有令人困惑的 API,基本上未經測試。

  • sysconfig

  • threading

    • RLock() 在 Python 3.15 中將不接受任何引數。自 Python 3.14 起,傳遞任何引數的用法已被棄用,因為 Python 版本不允許任何引數,但 C 版本允許任意數量的位置或關鍵字引數,並忽略每個引數。

  • types

  • typing

    • 用於建立 NamedTuple 類別的未以文件記錄之關鍵字引數語法 (Point = NamedTuple("Point", x=int, y=int)) 已自 Python 3.13 棄用。請改用基於類別的語法或函式語法 (functional syntax)。

    • 當使用 TypedDict 的函式語法時,未傳遞值給 fields 參數 (TD = TypedDict("TD")) 或傳遞 None (TD = TypedDict("TD", None)) 的做法自 Python 3.13 起已被棄用。請使用 class TD(TypedDict): passTD = TypedDict("TD", {}) 來建立具有零個欄位的 TypedDict。

    • 自 Python 3.13 起,typing.no_type_check_decorator() 裝飾器函式已被棄用。在 typing 模組中使用了八年之後,它尚未得到任何主要型別檢查器的支援。

  • wave

Python 3.16 中待移除的項目

  • 引入系統 (import system):

    • 在模組上設定 __loader__ 而沒有設定 __spec__.loader 的做法將於 Python 3.16 被棄用。在 Python 3.16 中,引入系統或標準函式庫將不再設定或考慮 __loader__

  • array

    • 自 Python 3.3 起,'u' 格式碼 (wchar_t) 在文件中已被棄用,自 Python 3.13 起在 runtime 已被棄用。請使用 'w' 格式碼 (Py_UCS4) 來取代 Unicode 字元。

  • asyncio

  • builtins

    • 自 Python 3.12 起,布林型別的位元反轉 ~True~False 已被棄用,因為它會產生不預期且不直觀的結果(-2-1)。使用 not x 代替布林值的邏輯否定。在極少數情況下,你需要對底層的整數進行位元反轉,請明確轉換為 ~int(x) (~int(x))。

  • shutil

    • 自 Python 3.14 起,ExecError 例外已被棄用。自 Python 3.4 以來,它尚未被 shutil 中的任何函式使用,現在是 RuntimeError 的別名。

  • symtable

  • sys

  • tarfile

    • 自 Python 3.13 起,未以文件記錄和未被使用的 TarFile.tarfile 屬性已被棄用。

Pending removal in Python 3.17

  • collections.abc:

    • collections.abc.ByteString is scheduled for removal in Python 3.17.

      Use isinstance(obj, collections.abc.Buffer) to test if obj implements the buffer protocol at runtime. For use in type annotations, either use Buffer or a union that explicitly specifies the types your code supports (e.g., bytes | bytearray | memoryview).

      ByteString was originally intended to be an abstract class that would serve as a supertype of both bytes and bytearray. However, since the ABC never had any methods, knowing that an object was an instance of ByteString never actually told you anything useful about the object. Other common buffer types such as memoryview were also never understood as subtypes of ByteString (either at runtime or by static type checkers).

      See PEP 688 for more details. (Contributed by Shantanu Jain in gh-91896.)

  • typing

    • Before Python 3.14, old-style unions were implemented using the private class typing._UnionGenericAlias. This class is no longer needed for the implementation, but it has been retained for backward compatibility, with removal scheduled for Python 3.17. Users should use documented introspection helpers like typing.get_origin() and typing.get_args() instead of relying on private implementation details.

    • typing.ByteString, deprecated since Python 3.9, is scheduled for removal in Python 3.17.

      Use isinstance(obj, collections.abc.Buffer) to test if obj implements the buffer protocol at runtime. For use in type annotations, either use Buffer or a union that explicitly specifies the types your code supports (e.g., bytes | bytearray | memoryview).

      ByteString was originally intended to be an abstract class that would serve as a supertype of both bytes and bytearray. However, since the ABC never had any methods, knowing that an object was an instance of ByteString never actually told you anything useful about the object. Other common buffer types such as memoryview were also never understood as subtypes of ByteString (either at runtime or by static type checkers).

      See PEP 688 for more details. (Contributed by Shantanu Jain in gh-91896.)

未來版本中的待移除項目

以下 API 將在未來被移除,雖然目前尚未安排移除日期。

  • argparse:已棄用巢狀引數群組和巢狀互斥群組。

  • 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 貢獻。)

  • calendarcalendar.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

  • importlib.metadata

    • EntryPoints 元組介面。

    • 回傳值上的隱式 None

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

  • mailbox:已棄用 StringIO 輸入和文本模式,請改用 BytesIO 和二進位模式。

  • os:在多執行緒行程中呼叫 os.register_at_fork()

  • pydoc.ErrorDuringImportexc_info 參數的元組值已被棄用,請用例外實例。

  • re:現在對正規表示式中的數值群組參照和群組名稱用了更嚴格的規則。現在只有 ASCII 數碼序列被接受作為數值參照。位元組模式和替換字串中的群組名稱現在只能包含 ASCII 字母、數碼和底線。(由 Serhiy Storchaka 於 gh-91760 貢獻。)

  • sre_compilesre_constantssre_parse 模組。

  • shutilrmtree()onerror 參數在 Python 3.12 中已被棄用;請改用 onexc 參數。

  • ssl 選項和協定:

    • 不帶協定引數的 ssl.SSLContext 已被棄用。

    • ssl.SSLContextset_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

  • 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 已被棄用並將會被移除,不過目前尚未訂定移除日期。