argparse
:argparse.BooleanOptionalAction
的 type、choices 和 metavar 參數已被棄用,將在 3.14 中移除。 (由 Nikita Sobolev 於 gh-92248 貢獻。)
ast
:自 Python 3.8 起,下列功能已在文件中被棄用,現在在存取或使用時會於 runtime 發出 DeprecationWarning
,並將在 Python 3.14 中移除:
ast.Num
ast.Str
ast.Bytes
ast.NameConstant
ast.Ellipsis
請改用 ast.Constant
。(由 Serhiy Storchaka 於 gh-90953 貢獻。)
已棄用並將在 Python 3.14 中移除的 child watcher 類別:MultiLoopChildWatcher
、FastChildWatcher
、AbstractChildWatcher
和 SafeChildWatcher
。 (由 Kumar Aditya 於 gh-94597 貢獻。)
asyncio.set_child_watcher()
、asyncio.get_child_watcher()
、asyncio.AbstractEventLoopPolicy.set_child_watcher()
和 asyncio.AbstractEventLoopPolicy.get_child_watcher()
已被棄用並將在 Python 3.14 中移除。(由 Kumar Aditya 於 gh-94597 貢獻。)
預設事件迴圈策略的 get_event_loop()
方法現在會在沒有設定目前事件迴圈且決定建立一個時發出 DeprecationWarning
。 (由 Serhiy Storchaka 和 Guido van Rossum 於 gh-100160 貢獻。)
collections.abc
:已棄用 ByteString
。請改用 Sequence
或 Buffer
。在 typing 中使用時,請改用聯集,如 bytes | bytearray
,或 collections.abc.Buffer
。(由 Shantanu Jain 於 gh-91896 貢獻。)
email
:已棄用 email.utils.localtime()
中的 isdst 參數。(由 Alan Williams 於 gh-72346 貢獻。)
importlib.abc
的已棄用類別:
importlib.abc.ResourceReader
importlib.abc.Traversable
importlib.abc.TraversableResources
請改用 importlib.resources.abc
類別:
(由 Jason R. Coombs 和 Hugo van Kemenade 貢獻於 gh-93963。)
itertools
有不以文件記錄、效率低下、過去常有 bug 且不一致的 copy、deepcopy 和 pickle 操作支援。將在 3.14 中移除以大幅減少程式碼量和維護負擔。 (由 Raymond Hettinger 於 gh-101588 貢獻。)
multiprocessing
:預設的啟動方法將在 Linux、BSD 和其他非 macOS POSIX 平台上更改為更安全的 方法,目前 'fork'
是預設值 (gh-84559)。對此增加一個 runtime 警告被認為太過擾人,因為 大多數程式碼不會在意。請使用 get_context()
或 set_start_method()
API 來明確指定你的程式碼何時需要 'fork'
。請參閱 Contexts and start methods。
pathlib
:已棄用 is_relative_to()
和 relative_to()
:額外引數的傳遞已被棄用。
pkgutil
:find_loader()
和 get_loader()
現在會引發 DeprecationWarning
;請改用 importlib.util.find_spec()
。 (由 Nikita Sobolev 於 gh-97850 貢獻。)
pty
:
master_open()
:請用 pty.openpty()
。
slave_open()
:請用 pty.openpty()
。
execute()
和 executemany()
,如果使用 named placeholders 且 parameters 是序列而不是 dict
。
typing
:自 Python 3.9 起已被棄用的 ByteString
現在在使用時會發出 DeprecationWarning
。
urllib
:urllib.parse.Quoter
已被棄用:它並非預期的公開 API。(由 Gregory P. Smith 於 gh-88168 貢獻。)
引入系統 (import system):
在模組上設定 __cached__
而沒有設定 __spec__.cached
的做法已被棄用。在 Python 3.15 中,引入系統或標準函式庫將不再設定或考慮 __cached__
。(gh-97879)
在模組上設定 __package__
而沒有設定 __spec__.parent
的做法已被棄用。在 Python 3.15 中,引入系統或標準函式庫將不再設定或考慮 __package__
。(gh-97879)
自 Python 3.13 起,未記錄的 ctypes.SetPointerType()
函式已被棄用。
過時且很少使用的 CGIHTTPRequestHandler
自 Python 3.13 起已被棄用。不存在直接的替代。任何東西都比 CGI 更好地將 Web 伺服器與請求處理程序介接起來。
自 Python 3.13 起,python -m http.server 命令列介面的 --cgi
旗標已被棄用。
load_module()
method:請改用 exec_module()
。
getdefaultlocale()
已在 Python 3.11 中被棄用,原本計劃在 Python 3.13 中移除 (gh-90817),但被延後至 Python 3.15。請改用 getlocale()
、setlocale()
和 getencoding()
。 (由 Hugo van Kemenade 於 gh-111187 貢獻。)
PurePath.is_reserved()
已自 Python 3.13 被棄用。請用 os.path.isreserved()
來偵測 Windows 上的保留路徑。
自 Python 3.13 起,java_ver()
已被棄用。此函式僅對 Jython 支援有用,具有令人困惑的 API,基本上未經測試。
sysconfig.is_python_build()
的 check_home 引數自 Python 3.12 起已被棄用。
RLock()
在 Python 3.15 中將不接受任何引數。自 Python 3.14 起,傳遞任何引數的用法已被棄用,因為 Python 版本不允許任何引數,但 C 版本允許任意數量的位置或關鍵字引數,並忽略每個引數。
types.CodeType
:自 3.10 起,存取 co_lnotab
已在 PEP 626 中被棄用,並計劃在 3.12 中移除,但只在 3.12 中於適當時發出 DeprecationWarning
。可能在 3.15 中移除。(由 Nikita Sobolev 於 gh-101866 貢獻。)
用於建立 NamedTuple
類別的未以文件記錄之關鍵字引數語法 (Point = NamedTuple("Point", x=int, y=int)
) 已自 Python 3.13 棄用。請改用基於類別的語法或函式語法 (functional syntax)。
When using the functional syntax of TypedDict
s, failing
to pass a value to the fields parameter (TD = TypedDict("TD")
) or
passing None
(TD = TypedDict("TD", None)
) has been deprecated
since Python 3.13.
Use class TD(TypedDict): pass
or TD = TypedDict("TD", {})
to create a TypedDict with zero field.
自 Python 3.13 起,typing.no_type_check_decorator()
裝飾器函式已被棄用。在 typing
模組中使用了八年之後,它尚未得到任何主要型別檢查器的支援。
wave
:
已棄用 Wave_read
和 Wave_write
類別的 getmark()
、setmark()
和 getmarkers()
方法自 Python 3.13 被棄用。
引入系統 (import system):
在模組上設定 __loader__
而沒有設定 __spec__.loader
的做法將於 Python 3.16 被棄用。在 Python 3.16 中,引入系統或標準函式庫將不再設定或考慮 __loader__
。
自 Python 3.3 起,'u'
格式碼 (wchar_t
) 在文件中已被棄用,自 Python 3.13 起在 runtime 已被棄用。請使用 'w'
格式碼 (Py_UCS4
) 來取代 Unicode 字元。
asyncio.iscoroutinefunction()
已被棄用並將在 Python 3.16 中移除,請改用 inspect.iscoroutinefunction()
。(由 Jiahao Li 和 Kumar Aditya 於 gh-122875 貢獻。)
自 Python 3.12 起,布林型別的位元反轉 ~True
或 ~False
已被棄用,因為它會產生不預期且不直觀的結果(-2
和 -1
)。使用 not x
代替布林值的邏輯否定。在極少數情況下,你需要對底層的整數進行位元反轉,請明確轉換為 ~int(x)
(~int(x)
)。
自 Python 3.14 起,ExecError
例外已被棄用。自 Python 3.4 以來,它尚未被 shutil
中的任何函式使用,現在是 RuntimeError
的別名。
自 Python 3.14 起,Class.get_methods
方法已被棄用。
sys
:
自 Python 3.13 起,_enablelegacywindowsfsencoding()
函式已被棄用。請改用 PYTHONLEGACYWINDOWSFSENCODING
環境變數。
自 Python 3.13 起,未以文件記錄和未被使用的 TarFile.tarfile
屬性已被棄用。
以下 API 將在未來被移除,雖然目前尚未安排移除日期。
argparse
:已棄用巢狀引數群組和巢狀互斥群組。
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
、is
和 or
之一的關鍵字,則會引發語法警告。在未來版本中,它將被更改為語法錯誤。(gh-87999)
__index__()
和 __int__()
方法回傳非 int 型別的支援:這些方法將需要回傳 int
的嚴格子類別實例。
將 int()
委派給 __trunc__()
方法。
在 complex()
建構子中將複數作為 real 或 imag 引數傳遞現在已被棄用;它應該只作為單個位置引數傳遞。 (由 Serhiy Storchaka 於 gh-109218 貢獻。)
calendar
:calendar.January
和 calendar.February
常數已被棄用並被 calendar.JANUARY
和 calendar.FEBRUARY
取代。 (由 Prince Roshan 於 gh-103636 貢獻。)
utcnow()
:請改用 datetime.datetime.now(tz=datetime.UTC)
。
utcfromtimestamp()
:請改用 datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)
。
gettext
:複數值必須是整數。
cache_from_source()
debug_override 參數已被棄用:請改用 optimization 參數。
EntryPoints
元組介面。
回傳值上的隱式 None
。
mailbox
:已棄用 StringIO 輸入和文本模式,請改用 BytesIO 和二進位模式。
os
:在多執行緒行程中呼叫 os.register_at_fork()
。
pydoc.ErrorDuringImport
:exc_info 參數的元組值已被棄用,請用例外實例。
re
:現在對正規表示式中的數值群組參照和群組名稱用了更嚴格的規則。現在只有 ASCII 數碼序列被接受作為數值參照。位元組模式和替換字串中的群組名稱現在只能包含 ASCII 字母、數碼和底線。(由 Serhiy Storchaka 於 gh-91760 貢獻。)
sre_compile
、sre_constants
和 sre_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
threading
方法:
threading.Condition.notifyAll()
:請用 notify_all()
。
threading.Event.isSet()
:請用 is_set()
。
threading.Thread.isDaemon()
、threading.Thread.setDaemon()
:請用 threading.Thread.daemon
屬性。
threading.Thread.getName()
、threading.Thread.setName()
:請用 threading.Thread.name
屬性。
threading.currentThread()
:請用 threading.current_thread()
。
threading.activeCount()
:請用 threading.active_count()
。
unittest.IsolatedAsyncioTestCase
:從測試案例中回傳非 None
的值已被棄用。
urllib.parse
已棄用函式:請改用 urlparse()
。
splitattr()
splithost()
splitnport()
splitpasswd()
splitport()
splitquery()
splittag()
splittype()
splituser()
splitvalue()
to_bytes()
urllib.request
:呼叫請求的 URLopener
和 FancyURLopener
風格已被棄用。請改用更新的 urlopen()
函式和方法。
wsgiref
:SimpleHandler.stdout.write()
不應該進行部分寫入。
xml.etree.ElementTree
:已棄用對 Element
的真值測試。在未來版本中,它將始終回傳 True
。請改用明確的 len(elem)
或 elem is not None
測試。
PyDictObject
中的 ma_version_tag
欄位,用於擴充模組 (PEP 699;gh-101193)。
設定 Python 初始化的函式,Python 3.11 中已被棄用:
PySys_SetArgvEx()
:請改以 PyConfig.argv
設定。
PySys_SetArgv()
:請改以 PyConfig.argv
設定。
Py_SetProgramName()`()
:請改以 PyConfig.program_name
設定。
Py_SetPythonHome()
:請改以 PyConfig.home
設定。
Py_InitializeFromConfig()
API 應該與 PyConfig
一起使用。
全域設定變數:
Py_HashRandomizationFlag
:請改用 PyConfig.use_hash_seed
和 PyConfig.hash_seed
。
Py_LegacyWindowsFSEncodingFlag
:請改用 PyPreConfig.legacy_windows_fs_encoding
。
Py_LegacyWindowsStdioFlag
:請改用 PyConfig.legacy_windows_stdio
。
Py_FileSystemDefaultEncoding
:請改用 PyConfig.filesystem_encoding
。
Py_HasFileSystemDefaultEncoding
:請改用 PyConfig.filesystem_encoding
。
Py_FileSystemDefaultEncodeErrors
:請改用 PyConfig.filesystem_errors
。
Py_UTF8Mode
:請改用 PyPreConfig.utf8_mode
。(請見 Py_PreInitialize()
)
Py_InitializeFromConfig()
API 應該與 PyConfig
一起使用。
libmpdecimal
的打包副本 (bundled copy)。
PyWeakref_GetObject()
和 PyWeakref_GET_OBJECT()
:請改用 PyWeakref_GetRef()
。
Py_UNICODE
型別與 Py_UNICODE_WIDE
巨集:請改用 wchar_t
。
Python 初始化函式:
PySys_ResetWarnOptions()
:請改為清除 sys.warnoptions
和 warnings.filters
。
Py_GetExecPrefix()
:請改用 sys.base_exec_prefix
與 sys.exec_prefix
。
Py_GetPath()
:請改用 sys.path
。
Py_GetPythonHome()
:請改用 PyConfig.home
或 PYTHONHOME
環境變數。
下列 API 已被棄用並將會被移除,不過目前尚未訂定移除日期。
Py_TPFLAGS_HAVE_FINALIZE
:自 Python 3.8 起不再需要
PySlice_GetIndicesEx()
:請改用 PySlice_Unpack()
和 PySlice_AdjustIndices()
。
PyUnicode_AsDecodedObject()
:請改用 PyCodec_Decode()
。
PyUnicode_AsDecodedUnicode()
:請改用 PyCodec_Decode()
。
PyUnicode_AsEncodedObject()
:請改用 PyCodec_Encode()
。
PyUnicode_AsEncodedUnicode()
:請改用 PyCodec_Encode()
。
PyUnicode_READY()
:自 Python 3.12 起不再需要
PyErr_Display()
:請改用 PyErr_DisplayException()
。
_PyErr_ChainExceptions()
:請改用 _PyErr_ChainExceptions1
。
PyBytesObject.ob_shash
成員:請改為呼叫 PyObject_Hash()
。
PyDictObject.ma_version_tag
成員。
執行緒局部儲存 (Thread Local Storage, TLS) API: