已棄用項目¶
Python 3.14 中待移除的項目¶
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 貢獻。)
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
。
urllib
:urllib.parse.Quoter
已被棄用:它並非預期的公開 API。(由 Gregory P. Smith 於 gh-88168 貢獻。)
Python 3.15 中待移除的項目¶
引入系統 (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)。當使用
TypedDict
的函式語法時,未傳遞值給 fields 參數 (TD = TypedDict("TD")
) 或傳遞None
(TD = TypedDict("TD", None)
) 的做法自 Python 3.13 起已被棄用。請使用class TD(TypedDict): pass
或TD = TypedDict("TD", {})
來建立具有零個欄位的 TypedDict。自 Python 3.13 起,
typing.no_type_check_decorator()
裝飾器函式已被棄用。在typing
模組中使用了八年之後,它尚未得到任何主要型別檢查器的支援。
wave
:已棄用
Wave_read
和Wave_write
類別的getmark()
、setmark()
和getmarkers()
方法自 Python 3.13 被棄用。
Python 3.16 中待移除的項目¶
引入系統 (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
屬性已被棄用。
Pending removal in Python 3.17¶
-
collections.abc.ByteString
is scheduled for removal in Python 3.17.Use
isinstance(obj, collections.abc.Buffer)
to test ifobj
implements the buffer protocol at runtime. For use in type annotations, either useBuffer
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 bothbytes
andbytearray
. However, since the ABC never had any methods, knowing that an object was an instance ofByteString
never actually told you anything useful about the object. Other common buffer types such asmemoryview
were also never understood as subtypes ofByteString
(either at runtime or by static type checkers).See PEP 688 for more details. (Contributed by Shantanu Jain in gh-91896.)
-
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 liketyping.get_origin()
andtyping.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 ifobj
implements the buffer protocol at runtime. For use in type annotations, either useBuffer
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 bothbytes
andbytearray
. However, since the ABC never had any methods, knowing that an object was an instance ofByteString
never actually told you anything useful about the object. Other common buffer types such asmemoryview
were also never understood as subtypes ofByteString
(either at runtime or by static type checkers).See PEP 688 for more details. (Contributed by Shantanu Jain in gh-91896.)
未來版本中的待移除項目¶
以下 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
測試。
C API 的棄用項目¶
Python 3.14 中待移除的項目¶
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
一起使用。
Python 3.15 中待移除的項目¶
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: