已棄用項目¶
Pending removal in 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
旗標已被棄用。
-
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,基本上未經測試。
-
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 貢獻。)
-
The undocumented keyword argument syntax for creating
NamedTuple
classes (for example,Point = NamedTuple("Point", x=int, y=int)
) has been deprecated since Python 3.13. Use the class-based syntax or the functional syntax instead.自 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 future versions¶
以下 API 將在未來被移除,雖然目前尚未安排移除日期。
-
Nesting argument groups and nesting mutually exclusive groups are deprecated.
Passing the undocumented keyword argument prefix_chars to
add_argument_group()
is now deprecated.The
argparse.FileType
type converter is deprecated.
-
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
:複數值必須是整數。-
load_module()
method:請改用exec_module()
。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
sysconfig.is_python_build()
的 check_home 參數已被棄用並被忽略。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()
wsgiref
:SimpleHandler.stdout.write()
不應該進行部分寫入。xml.etree.ElementTree
:已棄用對Element
的真值測試。在未來版本中,它將始終回傳True
。請改用明確的len(elem)
或elem is not None
測試。
C API deprecations¶
Pending removal in Python 3.15¶
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
環境變數。
Pending removal in future versions¶
下列 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: