棄用

計劃在 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 已棄用,將被移除,儘管目前尚未確定移除日期。