1Pending Removal in Future Versions 2^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 3 4The following APIs are deprecated and will be removed, 5although there is currently no date scheduled for their removal. 6 7* :c:macro:`Py_TPFLAGS_HAVE_FINALIZE`: 8 Unneeded since Python 3.8. 9* :c:func:`PyErr_Fetch`: 10 Use :c:func:`PyErr_GetRaisedException` instead. 11* :c:func:`PyErr_NormalizeException`: 12 Use :c:func:`PyErr_GetRaisedException` instead. 13* :c:func:`PyErr_Restore`: 14 Use :c:func:`PyErr_SetRaisedException` instead. 15* :c:func:`PyModule_GetFilename`: 16 Use :c:func:`PyModule_GetFilenameObject` instead. 17* :c:func:`PyOS_AfterFork`: 18 Use :c:func:`PyOS_AfterFork_Child` instead. 19* :c:func:`PySlice_GetIndicesEx`: 20 Use :c:func:`PySlice_Unpack` and :c:func:`PySlice_AdjustIndices` instead. 21* :c:func:`!PyUnicode_AsDecodedObject`: 22 Use :c:func:`PyCodec_Decode` instead. 23* :c:func:`!PyUnicode_AsDecodedUnicode`: 24 Use :c:func:`PyCodec_Decode` instead. 25* :c:func:`!PyUnicode_AsEncodedObject`: 26 Use :c:func:`PyCodec_Encode` instead. 27* :c:func:`!PyUnicode_AsEncodedUnicode`: 28 Use :c:func:`PyCodec_Encode` instead. 29* :c:func:`PyUnicode_READY`: 30 Unneeded since Python 3.12 31* :c:func:`!PyErr_Display`: 32 Use :c:func:`PyErr_DisplayException` instead. 33* :c:func:`!_PyErr_ChainExceptions`: 34 Use :c:func:`!_PyErr_ChainExceptions1` instead. 35* :c:member:`!PyBytesObject.ob_shash` member: 36 call :c:func:`PyObject_Hash` instead. 37* :c:member:`!PyDictObject.ma_version_tag` member. 38* Thread Local Storage (TLS) API: 39 40 * :c:func:`PyThread_create_key`: 41 Use :c:func:`PyThread_tss_alloc` instead. 42 * :c:func:`PyThread_delete_key`: 43 Use :c:func:`PyThread_tss_free` instead. 44 * :c:func:`PyThread_set_key_value`: 45 Use :c:func:`PyThread_tss_set` instead. 46 * :c:func:`PyThread_get_key_value`: 47 Use :c:func:`PyThread_tss_get` instead. 48 * :c:func:`PyThread_delete_key_value`: 49 Use :c:func:`PyThread_tss_delete` instead. 50 * :c:func:`PyThread_ReInitTLS`: 51 Unneeded since Python 3.7. 52