1**************************** 2 What's New In Python 3.10 3**************************** 4 5:Release: |release| 6:Date: |today| 7:Editor: Pablo Galindo Salgado 8 9.. Rules for maintenance: 10 11 * Anyone can add text to this document. Do not spend very much time 12 on the wording of your changes, because your text will probably 13 get rewritten to some degree. 14 15 * The maintainer will go through Misc/NEWS periodically and add 16 changes; it's therefore more important to add your changes to 17 Misc/NEWS than to this file. 18 19 * This is not a complete list of every single change; completeness 20 is the purpose of Misc/NEWS. Some changes I consider too small 21 or esoteric to include. If such a change is added to the text, 22 I'll just remove it. (This is another reason you shouldn't spend 23 too much time on writing your addition.) 24 25 * If you want to draw your new text to the attention of the 26 maintainer, add 'XXX' to the beginning of the paragraph or 27 section. 28 29 * It's OK to just add a fragmentary note about a change. For 30 example: "XXX Describe the transmogrify() function added to the 31 socket module." The maintainer will research the change and 32 write the necessary text. 33 34 * You can comment out your additions if you like, but it's not 35 necessary (especially when a final release is some months away). 36 37 * Credit the author of a patch or bugfix. Just the name is 38 sufficient; the e-mail address isn't necessary. 39 40 * It's helpful to add the bug/patch number as a comment: 41 42 XXX Describe the transmogrify() function added to the socket 43 module. 44 (Contributed by P.Y. Developer in :issue:`12345`.) 45 46 This saves the maintainer the effort of going through the git log 47 when researching a change. 48 49This article explains the new features in Python 3.10, compared to 3.9. 50 51For full details, see the :ref:`changelog <changelog>`. 52 53Summary -- Release highlights 54============================= 55 56.. This section singles out the most important changes in Python 3.10. 57 Brevity is key. 58 59 60.. PEP-sized items next. 61 62New syntax features: 63 64* :pep:`634`, Structural Pattern Matching: Specification 65* :pep:`635`, Structural Pattern Matching: Motivation and Rationale 66* :pep:`636`, Structural Pattern Matching: Tutorial 67* :issue:`12782`, Parenthesized context managers are now officially allowed. 68 69New features in the standard library: 70 71* :pep:`618`, Add Optional Length-Checking To zip. 72 73Interpreter improvements: 74 75* :pep:`626`, Precise line numbers for debugging and other tools. 76 77New typing features: 78 79* :pep:`604`, Allow writing union types as X | Y 80* :pep:`613`, Explicit Type Aliases 81* :pep:`612`, Parameter Specification Variables 82 83Important deprecations, removals or restrictions: 84 85* :pep:`644`, Require OpenSSL 1.1.1 or newer 86* :pep:`632`, Deprecate distutils module. 87* :pep:`623`, Deprecate and prepare for the removal of the wstr member in PyUnicodeObject. 88* :pep:`624`, Remove Py_UNICODE encoder APIs 89* :pep:`597`, Add optional EncodingWarning 90 91 92New Features 93============ 94 95.. _whatsnew310-pep563: 96 97Parenthesized context managers 98------------------------------ 99 100Using enclosing parentheses for continuation across multiple lines 101in context managers is now supported. This allows formatting a long 102collection of context managers in multiple lines in a similar way 103as it was previously possible with import statements. For instance, 104all these examples are now valid: 105 106.. code-block:: python 107 108 with (CtxManager() as example): 109 ... 110 111 with ( 112 CtxManager1(), 113 CtxManager2() 114 ): 115 ... 116 117 with (CtxManager1() as example, 118 CtxManager2()): 119 ... 120 121 with (CtxManager1(), 122 CtxManager2() as example): 123 ... 124 125 with ( 126 CtxManager1() as example1, 127 CtxManager2() as example2 128 ): 129 ... 130 131it is also possible to use a trailing comma at the end of the 132enclosed group: 133 134.. code-block:: python 135 136 with ( 137 CtxManager1() as example1, 138 CtxManager2() as example2, 139 CtxManager3() as example3, 140 ): 141 ... 142 143This new syntax uses the non LL(1) capacities of the new parser. 144Check :pep:`617` for more details. 145 146(Contributed by Guido van Rossum, Pablo Galindo and Lysandros Nikolaou 147in :issue:`12782` and :issue:`40334`.) 148 149 150Better error messages 151--------------------- 152 153SyntaxErrors 154~~~~~~~~~~~~ 155 156When parsing code that contains unclosed parentheses or brackets the interpreter 157now includes the location of the unclosed bracket of parentheses instead of displaying 158*SyntaxError: unexpected EOF while parsing* or pointing to some incorrect location. 159For instance, consider the following code (notice the unclosed '{'): 160 161.. code-block:: python 162 163 expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, 164 38: 4, 39: 4, 45: 5, 46: 5, 47: 5, 48: 5, 49: 5, 54: 6, 165 some_other_code = foo() 166 167Previous versions of the interpreter reported confusing places as the location of 168the syntax error: 169 170.. code-block:: python 171 172 File "example.py", line 3 173 some_other_code = foo() 174 ^ 175 SyntaxError: invalid syntax 176 177but in Python 3.10 a more informative error is emitted: 178 179.. code-block:: python 180 181 File "example.py", line 1 182 expected = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4, 183 ^ 184 SyntaxError: '{' was never closed 185 186 187In a similar way, errors involving unclosed string literals (single and triple 188quoted) now point to the start of the string instead of reporting EOF/EOL. 189 190These improvements are inspired by previous work in the PyPy interpreter. 191 192(Contributed by Pablo Galindo in :issue:`42864` and Batuhan Taskaya in 193:issue:`40176`.) 194 195:exc:`SyntaxError` exceptions raised by the interpreter will now highlight the 196full error range of the expression that constitutes the syntax error itself, 197instead of just where the problem is detected. In this way, instead of displaying 198(before Python 3.10): 199 200.. code-block:: python 201 202 >>> foo(x, z for z in range(10), t, w) 203 File "<stdin>", line 1 204 foo(x, z for z in range(10), t, w) 205 ^ 206 SyntaxError: Generator expression must be parenthesized 207 208now Python 3.10 will display the exception as: 209 210.. code-block:: python 211 212 >>> foo(x, z for z in range(10), t, w) 213 File "<stdin>", line 1 214 foo(x, z for z in range(10), t, w) 215 ^^^^^^^^^^^^^^^^^^^^ 216 SyntaxError: Generator expression must be parenthesized 217 218This improvement was contributed by Pablo Galindo in :issue:`43914`. 219 220A considerable amount of new specialized messages for :exc:`SyntaxError` exceptions 221have been incorporated. Some of the most notable ones are as follows: 222 223* Missing ``:`` before blocks: 224 225 .. code-block:: python 226 227 >>> if rocket.position > event_horizon 228 File "<stdin>", line 1 229 if rocket.position > event_horizon 230 ^ 231 SyntaxError: expected ':' 232 233 (Contributed by Pablo Galindo in :issue:`42997`) 234 235* Unparenthesised tuples in comprehensions targets: 236 237 .. code-block:: python 238 239 >>> {x,y for x,y in zip('abcd', '1234')} 240 File "<stdin>", line 1 241 {x,y for x,y in zip('abcd', '1234')} 242 ^ 243 SyntaxError: did you forget parentheses around the comprehension target? 244 245 (Contributed by Pablo Galindo in :issue:`43017`) 246 247* Missing commas in collection literals and between expressions: 248 249 .. code-block:: python 250 251 >>> items = { 252 ... x: 1, 253 ... y: 2 254 ... z: 3, 255 File "<stdin>", line 3 256 y: 2 257 ^ 258 SyntaxError: invalid syntax. Perhaps you forgot a comma? 259 260 (Contributed by Pablo Galindo in :issue:`43822`) 261 262* Multiple Exception types without parentheses: 263 264 .. code-block:: python 265 266 >>> try: 267 ... build_dyson_sphere() 268 ... except NotEnoughScienceError, NotEnoughResourcesError: 269 File "<stdin>", line 3 270 except NotEnoughScienceError, NotEnoughResourcesError: 271 ^ 272 SyntaxError: multiple exception types must be parenthesized 273 274 (Contributed by Pablo Galindo in :issue:`43149`) 275 276* Missing ``:`` and values in dictionary literals: 277 278 .. code-block:: python 279 280 >>> values = { 281 ... x: 1, 282 ... y: 2, 283 ... z: 284 ... } 285 File "<stdin>", line 4 286 z: 287 ^ 288 SyntaxError: expression expected after dictionary key and ':' 289 290 >>> values = {x:1, y:2, z w:3} 291 File "<stdin>", line 1 292 values = {x:1, y:2, z w:3} 293 ^ 294 SyntaxError: ':' expected after dictionary key 295 296 (Contributed by Pablo Galindo in :issue:`43823`) 297 298* ``try`` blocks without ``except`` or ``finally`` blocks: 299 300 .. code-block:: python 301 302 >>> try: 303 ... x = 2 304 ... something = 3 305 File "<stdin>", line 3 306 something = 3 307 ^^^^^^^^^ 308 SyntaxError: expected 'except' or 'finally' block 309 310 (Contributed by Pablo Galindo in :issue:`44305`) 311 312* Usage of ``=`` instead of ``==`` in comparisons: 313 314 .. code-block:: python 315 316 >>> if rocket.position = event_horizon: 317 File "<stdin>", line 1 318 if rocket.position = event_horizon: 319 ^ 320 SyntaxError: cannot assign to attribute here. Maybe you meant '==' instead of '='? 321 322 (Contributed by Pablo Galindo in :issue:`43797`) 323 324* Usage of ``*`` in f-strings: 325 326 .. code-block:: python 327 328 >>> f"Black holes {*all_black_holes} and revelations" 329 File "<stdin>", line 1 330 (*all_black_holes) 331 ^ 332 SyntaxError: f-string: cannot use starred expression here 333 334 (Contributed by Pablo Galindo in :issue:`41064`) 335 336IndentationErrors 337~~~~~~~~~~~~~~~~~ 338 339Many :exc:`IndentationError` exceptions now have more context regarding what kind of block 340was expecting an indentation, including the location of the statement: 341 342.. code-block:: python 343 344 >>> def foo(): 345 ... if lel: 346 ... x = 2 347 File "<stdin>", line 3 348 x = 2 349 ^ 350 IndentationError: expected an indented block after 'if' statement in line 2 351 352 353AttributeErrors 354~~~~~~~~~~~~~~~ 355 356When printing :exc:`AttributeError`, :c:func:`PyErr_Display` will offer 357suggestions of similar attribute names in the object that the exception was 358raised from: 359 360.. code-block:: python 361 362 >>> collections.namedtoplo 363 Traceback (most recent call last): 364 File "<stdin>", line 1, in <module> 365 AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple? 366 367(Contributed by Pablo Galindo in :issue:`38530`.) 368 369 .. warning:: 370 Notice this won't work if :c:func:`PyErr_Display` is not called to display the error 371 which can happen if some other custom error display function is used. This is a common 372 scenario in some REPLs like IPython. 373 374NameErrors 375~~~~~~~~~~ 376 377When printing :exc:`NameError` raised by the interpreter, :c:func:`PyErr_Display` 378will offer suggestions of similar variable names in the function that the exception 379was raised from: 380 381.. code-block:: python 382 383 >>> schwarzschild_black_hole = None 384 >>> schwarschild_black_hole 385 Traceback (most recent call last): 386 File "<stdin>", line 1, in <module> 387 NameError: name 'schwarschild_black_hole' is not defined. Did you mean: schwarzschild_black_hole? 388 389(Contributed by Pablo Galindo in :issue:`38530`.) 390 391 .. warning:: 392 Notice this won't work if :c:func:`PyErr_Display` is not called to display the error, 393 which can happen if some other custom error display function is used. This is a common 394 scenario in some REPLs like IPython. 395 396 397PEP 626: Precise line numbers for debugging and other tools 398----------------------------------------------------------- 399 400PEP 626 brings more precise and reliable line numbers for debugging, profiling and coverage tools. 401Tracing events, with the correct line number, are generated for all lines of code executed and only for lines of code that are executed. 402 403The ``f_lineno`` attribute of frame objects will always contain the expected line number. 404 405The ``co_lnotab`` attribute of code objects is deprecated and will be removed in 3.12. 406Code that needs to convert from offset to line number should use the new ``co_lines()`` method instead. 407 408PEP 634: Structural Pattern Matching 409------------------------------------ 410 411Structural pattern matching has been added in the form of a *match statement* 412and *case statements* of patterns with associated actions. Patterns 413consist of sequences, mappings, primitive data types as well as class instances. 414Pattern matching enables programs to extract information from complex data types, 415branch on the structure of data, and apply specific actions based on different 416forms of data. 417 418Syntax and operations 419~~~~~~~~~~~~~~~~~~~~~ 420 421The generic syntax of pattern matching is:: 422 423 match subject: 424 case <pattern_1>: 425 <action_1> 426 case <pattern_2>: 427 <action_2> 428 case <pattern_3>: 429 <action_3> 430 case _: 431 <action_wildcard> 432 433A match statement takes an expression and compares its value to successive 434patterns given as one or more case blocks. Specifically, pattern matching 435operates by: 436 437 1. using data with type and shape (the ``subject``) 438 2. evaluating the ``subject`` in the ``match`` statement 439 3. comparing the subject with each pattern in a ``case`` statement 440 from top to bottom until a match is confirmed. 441 4. executing the action associated with the pattern of the confirmed 442 match 443 5. If an exact match is not confirmed, the last case, a wildcard ``_``, 444 if provided, will be used as the matching case. If an exact match is 445 not confirmed and a wildcard case does not exist, the entire match 446 block is a no-op. 447 448Declarative approach 449~~~~~~~~~~~~~~~~~~~~ 450 451Readers may be aware of pattern matching through the simple example of matching 452a subject (data object) to a literal (pattern) with the switch statement found 453in C, Java or JavaScript (and many other languages). Often the switch statement 454is used for comparison of an object/expression with case statements containing 455literals. 456 457More powerful examples of pattern matching can be found in languages such as 458Scala and Elixir. With structural pattern matching, the approach is "declarative" and 459explicitly states the conditions (the patterns) for data to match. 460 461While an "imperative" series of instructions using nested "if" statements 462could be used to accomplish something similar to structural pattern matching, 463it is less clear than the "declarative" approach. Instead the "declarative" 464approach states the conditions to meet for a match and is more readable through 465its explicit patterns. While structural pattern matching can be used in its 466simplest form comparing a variable to a literal in a case statement, its 467true value for Python lies in its handling of the subject's type and shape. 468 469Simple pattern: match to a literal 470~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 471 472Let's look at this example as pattern matching in its simplest form: a value, 473the subject, being matched to several literals, the patterns. In the example 474below, ``status`` is the subject of the match statement. The patterns are 475each of the case statements, where literals represent request status codes. 476The associated action to the case is executed after a match:: 477 478 def http_error(status): 479 match status: 480 case 400: 481 return "Bad request" 482 case 404: 483 return "Not found" 484 case 418: 485 return "I'm a teapot" 486 case _: 487 return "Something's wrong with the internet" 488 489If the above function is passed a ``status`` of 418, "I'm a teapot" is returned. 490If the above function is passed a ``status`` of 500, the case statement with 491``_`` will match as a wildcard, and "Something's wrong with the internet" is 492returned. 493Note the last block: the variable name, ``_``, acts as a *wildcard* and insures 494the subject will always match. The use of ``_`` is optional. 495 496You can combine several literals in a single pattern using ``|`` ("or"):: 497 498 case 401 | 403 | 404: 499 return "Not allowed" 500 501Behavior without the wildcard 502^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 503 504If we modify the above example by removing the last case block, the example 505becomes:: 506 507 def http_error(status): 508 match status: 509 case 400: 510 return "Bad request" 511 case 404: 512 return "Not found" 513 case 418: 514 return "I'm a teapot" 515 516Without the use of ``_`` in a case statement, a match may not exist. If no 517match exists, the behavior is a no-op. For example, if ``status`` of 500 is 518passed, a no-op occurs. 519 520Patterns with a literal and variable 521~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 522 523Patterns can look like unpacking assignments, and a pattern may be used to bind 524variables. In this example, a data point can be unpacked to its x-coordinate 525and y-coordinate:: 526 527 # point is an (x, y) tuple 528 match point: 529 case (0, 0): 530 print("Origin") 531 case (0, y): 532 print(f"Y={y}") 533 case (x, 0): 534 print(f"X={x}") 535 case (x, y): 536 print(f"X={x}, Y={y}") 537 case _: 538 raise ValueError("Not a point") 539 540The first pattern has two literals, ``(0, 0)``, and may be thought of as an 541extension of the literal pattern shown above. The next two patterns combine a 542literal and a variable, and the variable *binds* a value from the subject 543(``point``). The fourth pattern captures two values, which makes it 544conceptually similar to the unpacking assignment ``(x, y) = point``. 545 546Patterns and classes 547~~~~~~~~~~~~~~~~~~~~ 548 549If you are using classes to structure your data, you can use as a pattern 550the class name followed by an argument list resembling a constructor. This 551pattern has the ability to capture class attributes into variables:: 552 553 class Point: 554 x: int 555 y: int 556 557 def location(point): 558 match point: 559 case Point(x=0, y=0): 560 print("Origin is the point's location.") 561 case Point(x=0, y=y): 562 print(f"Y={y} and the point is on the y-axis.") 563 case Point(x=x, y=0): 564 print(f"X={x} and the point is on the x-axis.") 565 case Point(): 566 print("The point is located somewhere else on the plane.") 567 case _: 568 print("Not a point") 569 570Patterns with positional parameters 571^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 572 573You can use positional parameters with some builtin classes that provide an 574ordering for their attributes (e.g. dataclasses). You can also define a specific 575position for attributes in patterns by setting the ``__match_args__`` special 576attribute in your classes. If it's set to ("x", "y"), the following patterns 577are all equivalent (and all bind the ``y`` attribute to the ``var`` variable):: 578 579 Point(1, var) 580 Point(1, y=var) 581 Point(x=1, y=var) 582 Point(y=var, x=1) 583 584Nested patterns 585~~~~~~~~~~~~~~~ 586 587Patterns can be arbitrarily nested. For example, if our data is a short 588list of points, it could be matched like this:: 589 590 match points: 591 case []: 592 print("No points in the list.") 593 case [Point(0, 0)]: 594 print("The origin is the only point in the list.") 595 case [Point(x, y)]: 596 print(f"A single point {x}, {y} is in the list.") 597 case [Point(0, y1), Point(0, y2)]: 598 print(f"Two points on the Y axis at {y1}, {y2} are in the list.") 599 case _: 600 print("Something else is found in the list.") 601 602Complex patterns and the wildcard 603~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 604 605To this point, the examples have used ``_`` alone in the last case statement. 606A wildcard can be used in more complex patterns, such as ``('error', code, _)``. 607For example:: 608 609 match test_variable: 610 case ('warning', code, 40): 611 print("A warning has been received.") 612 case ('error', code, _): 613 print(f"An error {code} occurred.") 614 615In the above case, ``test_variable`` will match for ('error', code, 100) and 616('error', code, 800). 617 618Guard 619~~~~~ 620 621We can add an ``if`` clause to a pattern, known as a "guard". If the 622guard is false, ``match`` goes on to try the next case block. Note 623that value capture happens before the guard is evaluated:: 624 625 match point: 626 case Point(x, y) if x == y: 627 print(f"The point is located on the diagonal Y=X at {x}.") 628 case Point(x, y): 629 print(f"Point is not on the diagonal.") 630 631Other Key Features 632~~~~~~~~~~~~~~~~~~ 633 634Several other key features: 635 636- Like unpacking assignments, tuple and list patterns have exactly the 637 same meaning and actually match arbitrary sequences. Technically, 638 the subject must be a sequence. 639 Therefore, an important exception is that patterns don't match iterators. 640 Also, to prevent a common mistake, sequence patterns don't match strings. 641 642- Sequence patterns support wildcards: ``[x, y, *rest]`` and ``(x, y, 643 *rest)`` work similar to wildcards in unpacking assignments. The 644 name after ``*`` may also be ``_``, so ``(x, y, *_)`` matches a sequence 645 of at least two items without binding the remaining items. 646 647- Mapping patterns: ``{"bandwidth": b, "latency": l}`` captures the 648 ``"bandwidth"`` and ``"latency"`` values from a dict. Unlike sequence 649 patterns, extra keys are ignored. A wildcard ``**rest`` is also 650 supported. (But ``**_`` would be redundant, so is not allowed.) 651 652- Subpatterns may be captured using the ``as`` keyword:: 653 654 case (Point(x1, y1), Point(x2, y2) as p2): ... 655 656 This binds x1, y1, x2, y2 like you would expect without the ``as`` clause, 657 and p2 to the entire second item of the subject. 658 659- Most literals are compared by equality. However, the singletons ``True``, 660 ``False`` and ``None`` are compared by identity. 661 662- Named constants may be used in patterns. These named constants must be 663 dotted names to prevent the constant from being interpreted as a capture 664 variable:: 665 666 from enum import Enum 667 class Color(Enum): 668 RED = 0 669 GREEN = 1 670 BLUE = 2 671 672 match color: 673 case Color.RED: 674 print("I see red!") 675 case Color.GREEN: 676 print("Grass is green") 677 case Color.BLUE: 678 print("I'm feeling the blues :(") 679 680For the full specification see :pep:`634`. Motivation and rationale 681are in :pep:`635`, and a longer tutorial is in :pep:`636`. 682 683 684.. _whatsnew310-pep597: 685 686Optional ``EncodingWarning`` and ``encoding="locale"`` option 687------------------------------------------------------------- 688 689The default encoding of :class:`TextIOWrapper` and :func:`open` is 690platform and locale dependent. Since UTF-8 is used on most Unix 691platforms, omitting ``encoding`` option when opening UTF-8 files 692(e.g. JSON, YAML, TOML, Markdown) is a very common bug. For example:: 693 694 # BUG: "rb" mode or encoding="utf-8" should be used. 695 with open("data.json") as f: 696 data = json.load(f) 697 698To find this type of bug, an optional ``EncodingWarning`` is added. 699It is emitted when :data:`sys.flags.warn_default_encoding <sys.flags>` 700is true and locale-specific default encoding is used. 701 702``-X warn_default_encoding`` option and :envvar:`PYTHONWARNDEFAULTENCODING` 703are added to enable the warning. 704 705See :ref:`io-text-encoding` for more information. 706 707.. _new-feat-related-type-hints: 708 709New Features Related to Type Hints 710================================== 711 712This section covers major changes affecting :pep:`484` type hints and 713the :mod:`typing` module. 714 715 716PEP 604: New Type Union Operator 717-------------------------------- 718 719A new type union operator was introduced which enables the syntax ``X | Y``. 720This provides a cleaner way of expressing 'either type X or type Y' instead of 721using :data:`typing.Union`, especially in type hints. 722 723In previous versions of Python, to apply a type hint for functions accepting 724arguments of multiple types, :data:`typing.Union` was used:: 725 726 def square(number: Union[int, float]) -> Union[int, float]: 727 return number ** 2 728 729 730Type hints can now be written in a more succinct manner:: 731 732 def square(number: int | float) -> int | float: 733 return number ** 2 734 735 736This new syntax is also accepted as the second argument to :func:`isinstance` 737and :func:`issubclass`:: 738 739 >>> isinstance(1, int | str) 740 True 741 742See :ref:`types-union` and :pep:`604` for more details. 743 744(Contributed by Maggie Moss and Philippe Prados in :issue:`41428`, 745with additions by Yurii Karabas and Serhiy Storchaka in :issue:`44490`.) 746 747 748PEP 612: Parameter Specification Variables 749------------------------------------------ 750 751Two new options to improve the information provided to static type checkers for 752:pep:`484`\ 's ``Callable`` have been added to the :mod:`typing` module. 753 754The first is the parameter specification variable. They are used to forward the 755parameter types of one callable to another callable -- a pattern commonly 756found in higher order functions and decorators. Examples of usage can be found 757in :class:`typing.ParamSpec`. Previously, there was no easy way to type annotate 758dependency of parameter types in such a precise manner. 759 760The second option is the new ``Concatenate`` operator. It's used in conjunction 761with parameter specification variables to type annotate a higher order callable 762which adds or removes parameters of another callable. Examples of usage can 763be found in :class:`typing.Concatenate`. 764 765See :class:`typing.Callable`, :class:`typing.ParamSpec`, 766:class:`typing.Concatenate`, :class:`typing.ParamSpecArgs`, 767:class:`typing.ParamSpecKwargs`, and :pep:`612` for more details. 768 769(Contributed by Ken Jin in :issue:`41559`, with minor enhancements by Jelle 770Zijlstra in :issue:`43783`. PEP written by Mark Mendoza.) 771 772 773PEP 613: TypeAlias 774------------------ 775 776:pep:`484` introduced the concept of type aliases, only requiring them to be 777top-level unannotated assignments. This simplicity sometimes made it difficult 778for type checkers to distinguish between type aliases and ordinary assignments, 779especially when forward references or invalid types were involved. Compare:: 780 781 StrCache = 'Cache[str]' # a type alias 782 LOG_PREFIX = 'LOG[DEBUG]' # a module constant 783 784Now the :mod:`typing` module has a special value :data:`TypeAlias` 785which lets you declare type aliases more explicitly:: 786 787 StrCache: TypeAlias = 'Cache[str]' # a type alias 788 LOG_PREFIX = 'LOG[DEBUG]' # a module constant 789 790See :pep:`613` for more details. 791 792(Contributed by Mikhail Golubev in :issue:`41923`.) 793 794PEP 647: User-Defined Type Guards 795--------------------------------- 796 797:data:`TypeGuard` has been added to the :mod:`typing` module to annotate 798type guard functions and improve information provided to static type checkers 799during type narrowing. For more information, please see :data:`TypeGuard`\ 's 800documentation, and :pep:`647`. 801 802(Contributed by Ken Jin and Guido van Rossum in :issue:`43766`. 803PEP written by Eric Traut.) 804 805Other Language Changes 806====================== 807 808* The :class:`int` type has a new method :meth:`int.bit_count`, returning the 809 number of ones in the binary expansion of a given integer, also known 810 as the population count. (Contributed by Niklas Fiekas in :issue:`29882`.) 811 812* The views returned by :meth:`dict.keys`, :meth:`dict.values` and 813 :meth:`dict.items` now all have a ``mapping`` attribute that gives a 814 :class:`types.MappingProxyType` object wrapping the original 815 dictionary. (Contributed by Dennis Sweeney in :issue:`40890`.) 816 817* :pep:`618`: The :func:`zip` function now has an optional ``strict`` flag, used 818 to require that all the iterables have an equal length. 819 820* Builtin and extension functions that take integer arguments no longer accept 821 :class:`~decimal.Decimal`\ s, :class:`~fractions.Fraction`\ s and other 822 objects that can be converted to integers only with a loss (e.g. that have 823 the :meth:`~object.__int__` method but do not have the 824 :meth:`~object.__index__` method). 825 (Contributed by Serhiy Storchaka in :issue:`37999`.) 826 827* If :func:`object.__ipow__` returns :const:`NotImplemented`, the operator will 828 correctly fall back to :func:`object.__pow__` and :func:`object.__rpow__` as expected. 829 (Contributed by Alex Shkop in :issue:`38302`.) 830 831* Assignment expressions can now be used unparenthesized within set literals 832 and set comprehensions, as well as in sequence indexes (but not slices). 833 834* Functions have a new ``__builtins__`` attribute which is used to look for 835 builtin symbols when a function is executed, instead of looking into 836 ``__globals__['__builtins__']``. The attribute is initialized from 837 ``__globals__["__builtins__"]`` if it exists, else from the current builtins. 838 (Contributed by Mark Shannon in :issue:`42990`.) 839 840* Two new builtin functions -- :func:`aiter` and :func:`anext` have been added 841 to provide asynchronous counterparts to :func:`iter` and :func:`next`, 842 respectively. 843 (Contributed by Joshua Bronson, Daniel Pope, and Justin Wang in :issue:`31861`.) 844 845* Static methods (:func:`@staticmethod <staticmethod>`) and class methods 846 (:func:`@classmethod <classmethod>`) now inherit the method attributes 847 (``__module__``, ``__name__``, ``__qualname__``, ``__doc__``, 848 ``__annotations__``) and have a new ``__wrapped__`` attribute. 849 Moreover, static methods are now callable as regular functions. 850 (Contributed by Victor Stinner in :issue:`43682`.) 851 852* Annotations for complex targets (everything beside ``simple name`` targets 853 defined by :pep:`526`) no longer cause any runtime effects with ``from __future__ import annotations``. 854 (Contributed by Batuhan Taskaya in :issue:`42737`.) 855 856* Class and module objects now lazy-create empty annotations dicts on demand. 857 The annotations dicts are stored in the object’s ``__dict__`` for 858 backwards compatibility. This improves the best practices for working 859 with ``__annotations__``; for more information, please see 860 :ref:`annotations-howto`. 861 (Contributed by Larry Hastings in :issue:`43901`.) 862 863* Annotations consist of ``yield``, ``yield from``, ``await`` or named expressions 864 are now forbidden under ``from __future__ import annotations`` due to their side 865 effects. 866 (Contributed by Batuhan Taskaya in :issue:`42725`.) 867 868* Usage of unbound variables, ``super()`` and other expressions that might 869 alter the processing of symbol table as annotations are now rendered 870 effectless under ``from __future__ import annotations``. 871 (Contributed by Batuhan Taskaya in :issue:`42725`.) 872 873* Hashes of NaN values of both :class:`float` type and 874 :class:`decimal.Decimal` type now depend on object identity. Formerly, they 875 always hashed to ``0`` even though NaN values are not equal to one another. 876 This caused potentially quadratic runtime behavior due to excessive hash 877 collisions when creating dictionaries and sets containing multiple NaNs. 878 (Contributed by Raymond Hettinger in :issue:`43475`.) 879 880* A :exc:`SyntaxError` (instead of a :exc:`NameError`) will be raised when deleting 881 the :const:`__debug__` constant. (Contributed by Dong-hee Na in :issue:`45000`.) 882 883* :exc:`SyntaxError` exceptions now have ``end_lineno`` and 884 ``end_offset`` attributes. They will be ``None`` if not determined. 885 (Contributed by Pablo Galindo in :issue:`43914`.) 886 887New Modules 888=========== 889 890* None yet. 891 892 893Improved Modules 894================ 895 896asyncio 897------- 898 899Add missing :meth:`~asyncio.events.AbstractEventLoop.connect_accepted_socket` 900method. 901(Contributed by Alex Grönholm in :issue:`41332`.) 902 903argparse 904-------- 905 906Misleading phrase "optional arguments" was replaced with "options" in argparse help. Some tests might require adaptation if they rely on exact output match. 907(Contributed by Raymond Hettinger in :issue:`9694`.) 908 909array 910----- 911 912The :meth:`~array.array.index` method of :class:`array.array` now has 913optional *start* and *stop* parameters. 914(Contributed by Anders Lorentsen and Zackery Spytz in :issue:`31956`.) 915 916asynchat, asyncore, smtpd 917------------------------- 918These modules have been marked as deprecated in their module documentation 919since Python 3.6. An import-time :class:`DeprecationWarning` has now been 920added to all three of these modules. 921 922base64 923------ 924 925Add :func:`base64.b32hexencode` and :func:`base64.b32hexdecode` to support the 926Base32 Encoding with Extended Hex Alphabet. 927 928bdb 929--- 930 931Add :meth:`~bdb.Breakpoint.clearBreakpoints` to reset all set breakpoints. 932(Contributed by Irit Katriel in :issue:`24160`.) 933 934bisect 935------ 936 937Added the possibility of providing a *key* function to the APIs in the :mod:`bisect` 938module. (Contributed by Raymond Hettinger in :issue:`4356`.) 939 940codecs 941------ 942 943Add a :func:`codecs.unregister` function to unregister a codec search function. 944(Contributed by Hai Shi in :issue:`41842`.) 945 946collections.abc 947--------------- 948 949The ``__args__`` of the :ref:`parameterized generic <types-genericalias>` for 950:class:`collections.abc.Callable` are now consistent with :data:`typing.Callable`. 951:class:`collections.abc.Callable` generic now flattens type parameters, similar 952to what :data:`typing.Callable` currently does. This means that 953``collections.abc.Callable[[int, str], str]`` will have ``__args__`` of 954``(int, str, str)``; previously this was ``([int, str], str)``. To allow this 955change, :class:`types.GenericAlias` can now be subclassed, and a subclass will 956be returned when subscripting the :class:`collections.abc.Callable` type. Note 957that a :exc:`TypeError` may be raised for invalid forms of parameterizing 958:class:`collections.abc.Callable` which may have passed silently in Python 3.9. 959(Contributed by Ken Jin in :issue:`42195`.) 960 961contextlib 962---------- 963 964Add a :func:`contextlib.aclosing` context manager to safely close async generators 965and objects representing asynchronously released resources. 966(Contributed by Joongi Kim and John Belmonte in :issue:`41229`.) 967 968Add asynchronous context manager support to :func:`contextlib.nullcontext`. 969(Contributed by Tom Gringauz in :issue:`41543`.) 970 971Add :class:`AsyncContextDecorator`, for supporting usage of async context managers 972as decorators. 973 974curses 975------ 976 977The extended color functions added in ncurses 6.1 will be used transparently 978by :func:`curses.color_content`, :func:`curses.init_color`, 979:func:`curses.init_pair`, and :func:`curses.pair_content`. A new function, 980:func:`curses.has_extended_color_support`, indicates whether extended color 981support is provided by the underlying ncurses library. 982(Contributed by Jeffrey Kintscher and Hans Petter Jansson in :issue:`36982`.) 983 984The ``BUTTON5_*`` constants are now exposed in the :mod:`curses` module if 985they are provided by the underlying curses library. 986(Contributed by Zackery Spytz in :issue:`39273`.) 987 988dataclasses 989----------- 990 991__slots__ 992~~~~~~~~~ 993 994Added ``slots`` parameter in :func:`dataclasses.dataclass` decorator. 995(Contributed by Yurii Karabas in :issue:`42269`) 996 997Keyword-only fields 998~~~~~~~~~~~~~~~~~~~ 999 1000dataclasses now supports fields that are keyword-only in the 1001generated __init__ method. There are a number of ways of specifying 1002keyword-only fields. 1003 1004You can say that every field is keyword-only: 1005 1006.. code-block:: python 1007 1008 from dataclasses import dataclass 1009 1010 @dataclass(kw_only=True) 1011 class Birthday: 1012 name: str 1013 birthday: datetime.date 1014 1015Both ``name`` and ``birthday`` are keyword-only parameters to the 1016generated __init__ method. 1017 1018You can specify keyword-only on a per-field basis: 1019 1020.. code-block:: python 1021 1022 from dataclasses import dataclass 1023 1024 @dataclass 1025 class Birthday: 1026 name: str 1027 birthday: datetime.date = field(kw_only=True) 1028 1029Here only ``birthday`` is keyword-only. If you set ``kw_only`` on 1030individual fields, be aware that there are rules about re-ordering 1031fields due to keyword-only fields needing to follow non-keyword-only 1032fields. See the full dataclasses documentation for details. 1033 1034You can also specify that all fields following a KW_ONLY marker are 1035keyword-only. This will probably be the most common usage: 1036 1037.. code-block:: python 1038 1039 from dataclasses import dataclass, KW_ONLY 1040 1041 @dataclass 1042 class Point: 1043 x: float 1044 y: float 1045 _: KW_ONLY 1046 z: float = 0.0 1047 t: float = 0.0 1048 1049Here, ``z`` and ``t`` are keyword-only parameters, while ``x`` and 1050``y`` are not. 1051(Contributed by Eric V. Smith in :issue:`43532`) 1052 1053.. _distutils-deprecated: 1054 1055distutils 1056--------- 1057 1058The entire ``distutils`` package is deprecated, to be removed in Python 10593.12. Its functionality for specifying package builds has already been 1060completely replaced by third-party packages ``setuptools`` and 1061``packaging``, and most other commonly used APIs are available elsewhere 1062in the standard library (such as :mod:`platform`, :mod:`shutil`, 1063:mod:`subprocess` or :mod:`sysconfig`). There are no plans to migrate 1064any other functionality from ``distutils``, and applications that are 1065using other functions should plan to make private copies of the code. 1066Refer to :pep:`632` for discussion. 1067 1068The ``bdist_wininst`` command deprecated in Python 3.8 has been removed. 1069The ``bdist_wheel`` command is now recommended to distribute binary packages 1070on Windows. 1071(Contributed by Victor Stinner in :issue:`42802`.) 1072 1073doctest 1074------- 1075 1076When a module does not define ``__loader__``, fall back to ``__spec__.loader``. 1077(Contributed by Brett Cannon in :issue:`42133`.) 1078 1079encodings 1080--------- 1081 1082:func:`encodings.normalize_encoding` now ignores non-ASCII characters. 1083(Contributed by Hai Shi in :issue:`39337`.) 1084 1085fileinput 1086--------- 1087 1088Add *encoding* and *errors* parameters in :func:`fileinput.input` and 1089:class:`fileinput.FileInput`. 1090(Contributed by Inada Naoki in :issue:`43712`.) 1091 1092:func:`fileinput.hook_compressed` now returns :class:`TextIOWrapper` object 1093when *mode* is "r" and file is compressed, like uncompressed files. 1094(Contributed by Inada Naoki in :issue:`5758`.) 1095 1096faulthandler 1097------------ 1098 1099The :mod:`faulthandler` module now detects if a fatal error occurs during a 1100garbage collector collection. 1101(Contributed by Victor Stinner in :issue:`44466`.) 1102 1103gc 1104-- 1105 1106Add audit hooks for :func:`gc.get_objects`, :func:`gc.get_referrers` and 1107:func:`gc.get_referents`. (Contributed by Pablo Galindo in :issue:`43439`.) 1108 1109glob 1110---- 1111 1112Add the *root_dir* and *dir_fd* parameters in :func:`~glob.glob` and 1113:func:`~glob.iglob` which allow to specify the root directory for searching. 1114(Contributed by Serhiy Storchaka in :issue:`38144`.) 1115 1116hashlib 1117------- 1118 1119The hashlib module requires OpenSSL 1.1.1 or newer. 1120(Contributed by Christian Heimes in :pep:`644` and :issue:`43669`.) 1121 1122The hashlib module has preliminary support for OpenSSL 3.0.0. 1123(Contributed by Christian Heimes in :issue:`38820` and other issues.) 1124 1125The pure-Python fallback of :func:`~hashlib.pbkdf2_hmac` is deprecated. In 1126the future PBKDF2-HMAC will only be available when Python has been built with 1127OpenSSL support. 1128(Contributed by Christian Heimes in :issue:`43880`.) 1129 1130hmac 1131---- 1132 1133The hmac module now uses OpenSSL's HMAC implementation internally. 1134(Contributed by Christian Heimes in :issue:`40645`.) 1135 1136IDLE and idlelib 1137---------------- 1138 1139Make IDLE invoke :func:`sys.excepthook` (when started without '-n'). 1140User hooks were previously ignored. (Patch by Ken Hilton in 1141:issue:`43008`.) 1142 1143This change was backported to a 3.9 maintenance release. 1144 1145Add a Shell sidebar. Move the primary prompt ('>>>') to the sidebar. 1146Add secondary prompts ('...') to the sidebar. Left click and optional 1147drag selects one or more lines of text, as with the editor 1148line number sidebar. Right click after selecting text lines displays 1149a context menu with 'copy with prompts'. This zips together prompts 1150from the sidebar with lines from the selected text. This option also 1151appears on the context menu for the text. (Contributed by Tal Einat 1152in :issue:`37903`.) 1153 1154Use spaces instead of tabs to indent interactive code. This makes 1155interactive code entries 'look right'. Making this feasible was a 1156major motivation for adding the shell sidebar. Contributed by 1157Terry Jan Reedy in :issue:`37892`.) 1158 1159We expect to backport these shell changes to a future 3.9 maintenance 1160release. 1161 1162Highlight the new :ref:`soft keywords <soft-keywords>` :keyword:`match`, 1163:keyword:`case <match>`, and :keyword:`_ <wildcard-patterns>` in 1164pattern-matching statements. However, this highlighting is not perfect 1165and will be incorrect in some rare cases, including some ``_``-s in 1166``case`` patterns. (Contributed by Tal Einat in :issue:`44010`.) 1167 1168importlib.metadata 1169------------------ 1170 1171Feature parity with ``importlib_metadata`` 4.6 1172(`history <https://importlib-metadata.readthedocs.io/en/latest/history.html>`_). 1173 1174:ref:`importlib.metadata entry points <entry-points>` 1175now provide a nicer experience 1176for selecting entry points by group and name through a new 1177:class:`importlib.metadata.EntryPoints` class. See the Compatibility 1178Note in the docs for more info on the deprecation and usage. 1179 1180Added :func:`importlib.metadata.packages_distributions` for resolving 1181top-level Python modules and packages to their 1182:class:`importlib.metadata.Distribution`. 1183 1184inspect 1185------- 1186 1187When a module does not define ``__loader__``, fall back to ``__spec__.loader``. 1188(Contributed by Brett Cannon in :issue:`42133`.) 1189 1190Add :func:`inspect.get_annotations`, which safely computes the annotations 1191defined on an object. It works around the quirks of accessing the annotations 1192on various types of objects, and makes very few assumptions about the object 1193it examines. :func:`inspect.get_annotations` can also correctly un-stringize 1194stringized annotations. :func:`inspect.get_annotations` is now considered 1195best practice for accessing the annotations dict defined on any Python object; 1196for more information on best practices for working with annotations, please see 1197:ref:`annotations-howto`. 1198Relatedly, :func:`inspect.signature`, 1199:func:`inspect.Signature.from_callable`, and :func:`inspect.Signature.from_function` 1200now call :func:`inspect.get_annotations` to retrieve annotations. This means 1201:func:`inspect.signature` and :func:`inspect.Signature.from_callable` can 1202also now un-stringize stringized annotations. 1203(Contributed by Larry Hastings in :issue:`43817`.) 1204 1205linecache 1206--------- 1207 1208When a module does not define ``__loader__``, fall back to ``__spec__.loader``. 1209(Contributed by Brett Cannon in :issue:`42133`.) 1210 1211os 1212-- 1213 1214Add :func:`os.cpu_count()` support for VxWorks RTOS. 1215(Contributed by Peixing Xin in :issue:`41440`.) 1216 1217Add a new function :func:`os.eventfd` and related helpers to wrap the 1218``eventfd2`` syscall on Linux. 1219(Contributed by Christian Heimes in :issue:`41001`.) 1220 1221Add :func:`os.splice()` that allows to move data between two file 1222descriptors without copying between kernel address space and user 1223address space, where one of the file descriptors must refer to a 1224pipe. (Contributed by Pablo Galindo in :issue:`41625`.) 1225 1226Add :data:`~os.O_EVTONLY`, :data:`~os.O_FSYNC`, :data:`~os.O_SYMLINK` 1227and :data:`~os.O_NOFOLLOW_ANY` for macOS. 1228(Contributed by Dong-hee Na in :issue:`43106`.) 1229 1230os.path 1231------- 1232 1233:func:`os.path.realpath` now accepts a *strict* keyword-only argument. When set 1234to ``True``, :exc:`OSError` is raised if a path doesn't exist or a symlink loop 1235is encountered. 1236(Contributed by Barney Gale in :issue:`43757`.) 1237 1238pathlib 1239------- 1240 1241Add slice support to :attr:`PurePath.parents <pathlib.PurePath.parents>`. 1242(Contributed by Joshua Cannon in :issue:`35498`) 1243 1244Add negative indexing support to :attr:`PurePath.parents 1245<pathlib.PurePath.parents>`. 1246(Contributed by Yaroslav Pankovych in :issue:`21041`) 1247 1248Add :meth:`Path.hardlink_to <pathlib.Path.hardlink_to>` method that 1249supersedes :meth:`~pathlib.Path.link_to`. The new method has the same argument 1250order as :meth:`~pathlib.Path.symlink_to`. 1251(Contributed by Barney Gale in :issue:`39950`.) 1252 1253:meth:`pathlib.Path.stat` and :meth:`~pathlib.Path.chmod` now accept a 1254*follow_symlinks* keyword-only argument for consistency with corresponding 1255functions in the :mod:`os` module. 1256(Contributed by Barney Gale in :issue:`39906`.) 1257 1258platform 1259-------- 1260 1261Add :func:`platform.freedesktop_os_release()` to retrieve operation system 1262identification from `freedesktop.org os-release 1263<https://www.freedesktop.org/software/systemd/man/os-release.html>`_ standard file. 1264(Contributed by Christian Heimes in :issue:`28468`) 1265 1266pprint 1267------ 1268 1269:func:`pprint.pprint` now accepts a new ``underscore_numbers`` keyword argument. 1270(Contributed by sblondon in :issue:`42914`.) 1271 1272:mod:`pprint` can now pretty-print :class:`dataclasses.dataclass` instances. 1273(Contributed by Lewis Gaul in :issue:`43080`.) 1274 1275py_compile 1276---------- 1277 1278Add ``--quiet`` option to command-line interface of :mod:`py_compile`. 1279(Contributed by Gregory Schevchenko in :issue:`38731`.) 1280 1281pyclbr 1282------ 1283 1284Add an ``end_lineno`` attribute to the ``Function`` and ``Class`` 1285objects in the tree returned by :func:`pyclbr.readline` and 1286:func:`pyclbr.readline_ex`. It matches the existing (start) ``lineno``. 1287(Contributed by Aviral Srivastava in :issue:`38307`.) 1288 1289shelve 1290------ 1291 1292The :mod:`shelve` module now uses :data:`pickle.DEFAULT_PROTOCOL` by default 1293instead of :mod:`pickle` protocol ``3`` when creating shelves. 1294(Contributed by Zackery Spytz in :issue:`34204`.) 1295 1296statistics 1297---------- 1298 1299Add :func:`~statistics.covariance`, Pearson's 1300:func:`~statistics.correlation`, and simple 1301:func:`~statistics.linear_regression` functions. 1302(Contributed by Tymoteusz Wołodźko in :issue:`38490`.) 1303 1304site 1305---- 1306 1307When a module does not define ``__loader__``, fall back to ``__spec__.loader``. 1308(Contributed by Brett Cannon in :issue:`42133`.) 1309 1310socket 1311------ 1312 1313The exception :exc:`socket.timeout` is now an alias of :exc:`TimeoutError`. 1314(Contributed by Christian Heimes in :issue:`42413`.) 1315 1316Add option to create MPTCP sockets with ``IPPROTO_MPTCP`` 1317(Contributed by Rui Cunha in :issue:`43571`.) 1318 1319Add ``IP_RECVTOS`` option to receive the type of service (ToS) or DSCP/ECN fields 1320(Contributed by Georg Sauthoff in :issue:`44077`.) 1321 1322ssl 1323--- 1324 1325The ssl module requires OpenSSL 1.1.1 or newer. 1326(Contributed by Christian Heimes in :pep:`644` and :issue:`43669`.) 1327 1328The ssl module has preliminary support for OpenSSL 3.0.0 and new option 1329:data:`~ssl.OP_IGNORE_UNEXPECTED_EOF`. 1330(Contributed by Christian Heimes in :issue:`38820`, :issue:`43794`, 1331:issue:`43788`, :issue:`43791`, :issue:`43799`, :issue:`43920`, 1332:issue:`43789`, and :issue:`43811`.) 1333 1334Deprecated function and use of deprecated constants now result in 1335a :exc:`DeprecationWarning`. :attr:`ssl.SSLContext.options` has 1336:data:`~ssl.OP_NO_SSLv2` and :data:`~ssl.OP_NO_SSLv3` set by default and 1337therefore cannot warn about setting the flag again. The 1338:ref:`deprecation section <whatsnew310-deprecated>` has a list of deprecated 1339features. 1340(Contributed by Christian Heimes in :issue:`43880`.) 1341 1342The ssl module now has more secure default settings. Ciphers without forward 1343secrecy or SHA-1 MAC are disabled by default. Security level 2 prohibits 1344weak RSA, DH, and ECC keys with less than 112 bits of security. 1345:class:`~ssl.SSLContext` defaults to minimum protocol version TLS 1.2. 1346Settings are based on Hynek Schlawack's research. 1347(Contributed by Christian Heimes in :issue:`43998`.) 1348 1349The deprecated protocols SSL 3.0, TLS 1.0, and TLS 1.1 are no longer 1350officially supported. Python does not block them actively. However 1351OpenSSL build options, distro configurations, vendor patches, and cipher 1352suites may prevent a successful handshake. 1353 1354Add a *timeout* parameter to the :func:`ssl.get_server_certificate` function. 1355(Contributed by Zackery Spytz in :issue:`31870`.) 1356 1357The ssl module uses heap-types and multi-phase initialization. 1358(Contributed by Christian Heimes in :issue:`42333`.) 1359 1360A new verify flag :data:`~ssl.VERIFY_X509_PARTIAL_CHAIN` has been added. 1361(Contributed by l0x in :issue:`40849`.) 1362 1363sqlite3 1364------- 1365 1366Add audit events for :func:`~sqlite3.connect/handle`, 1367:meth:`~sqlite3.Connection.enable_load_extension`, and 1368:meth:`~sqlite3.Connection.load_extension`. 1369(Contributed by Erlend E. Aasland in :issue:`43762`.) 1370 1371sys 1372--- 1373 1374Add :data:`sys.orig_argv` attribute: the list of the original command line 1375arguments passed to the Python executable. 1376(Contributed by Victor Stinner in :issue:`23427`.) 1377 1378Add :data:`sys.stdlib_module_names`, containing the list of the standard library 1379module names. 1380(Contributed by Victor Stinner in :issue:`42955`.) 1381 1382_thread 1383------- 1384 1385:func:`_thread.interrupt_main` now takes an optional signal number to 1386simulate (the default is still :data:`signal.SIGINT`). 1387(Contributed by Antoine Pitrou in :issue:`43356`.) 1388 1389threading 1390--------- 1391 1392Add :func:`threading.gettrace` and :func:`threading.getprofile` to 1393retrieve the functions set by :func:`threading.settrace` and 1394:func:`threading.setprofile` respectively. 1395(Contributed by Mario Corchero in :issue:`42251`.) 1396 1397Add :data:`threading.__excepthook__` to allow retrieving the original value 1398of :func:`threading.excepthook` in case it is set to a broken or a different 1399value. 1400(Contributed by Mario Corchero in :issue:`42308`.) 1401 1402traceback 1403--------- 1404 1405The :func:`~traceback.format_exception`, 1406:func:`~traceback.format_exception_only`, and 1407:func:`~traceback.print_exception` functions can now take an exception object 1408as a positional-only argument. 1409(Contributed by Zackery Spytz and Matthias Bussonnier in :issue:`26389`.) 1410 1411types 1412----- 1413 1414Reintroduce the :data:`types.EllipsisType`, :data:`types.NoneType` 1415and :data:`types.NotImplementedType` classes, providing a new set 1416of types readily interpretable by type checkers. 1417(Contributed by Bas van Beek in :issue:`41810`.) 1418 1419typing 1420------ 1421 1422For major changes, see :ref:`new-feat-related-type-hints`. 1423 1424The behavior of :class:`typing.Literal` was changed to conform with :pep:`586` 1425and to match the behavior of static type checkers specified in the PEP. 1426 14271. ``Literal`` now de-duplicates parameters. 14282. Equality comparisons between ``Literal`` objects are now order independent. 14293. ``Literal`` comparisons now respect types. For example, 1430 ``Literal[0] == Literal[False]`` previously evaluated to ``True``. It is 1431 now ``False``. To support this change, the internally used type cache now 1432 supports differentiating types. 14334. ``Literal`` objects will now raise a :exc:`TypeError` exception during 1434 equality comparisons if any of their parameters are not :term:`hashable`. 1435 Note that declaring ``Literal`` with unhashable parameters will not throw 1436 an error:: 1437 1438 >>> from typing import Literal 1439 >>> Literal[{0}] 1440 >>> Literal[{0}] == Literal[{False}] 1441 Traceback (most recent call last): 1442 File "<stdin>", line 1, in <module> 1443 TypeError: unhashable type: 'set' 1444 1445(Contributed by Yurii Karabas in :issue:`42345`.) 1446 1447Add new function :func:`typing.is_typeddict` to introspect if an annotation 1448is a :class:`typing.TypedDict`. 1449(Contributed by Patrick Reader in :issue:`41792`) 1450 1451Subclasses of ``typing.Protocol`` which only have data variables declared 1452will now raise a ``TypeError`` when checked with ``isinstance`` unless they 1453are decorated with :func:`runtime_checkable`. Previously, these checks 1454passed silently. Users should decorate their 1455subclasses with the :func:`runtime_checkable` decorator 1456if they want runtime protocols. 1457(Contributed by Yurii Karabas in :issue:`38908`) 1458 1459Importing from the ``typing.io`` and ``typing.re`` submodules will now emit 1460:exc:`DeprecationWarning`. These submodules have been deprecated since 1461Python 3.8 and will be removed in a future version of Python. Anything 1462belonging to those submodules should be imported directly from 1463:mod:`typing` instead. 1464(Contributed by Sebastian Rittau in :issue:`38291`) 1465 1466unittest 1467-------- 1468 1469Add new method :meth:`~unittest.TestCase.assertNoLogs` to complement the 1470existing :meth:`~unittest.TestCase.assertLogs`. (Contributed by Kit Yan Choi 1471in :issue:`39385`.) 1472 1473urllib.parse 1474------------ 1475 1476Python versions earlier than Python 3.10 allowed using both ``;`` and ``&`` as 1477query parameter separators in :func:`urllib.parse.parse_qs` and 1478:func:`urllib.parse.parse_qsl`. Due to security concerns, and to conform with 1479newer W3C recommendations, this has been changed to allow only a single 1480separator key, with ``&`` as the default. This change also affects 1481:func:`cgi.parse` and :func:`cgi.parse_multipart` as they use the affected 1482functions internally. For more details, please see their respective 1483documentation. 1484(Contributed by Adam Goldschmidt, Senthil Kumaran and Ken Jin in :issue:`42967`.) 1485 1486The presence of newline or tab characters in parts of a URL allows for some 1487forms of attacks. Following the WHATWG specification that updates :rfc:`3986`, 1488ASCII newline ``\n``, ``\r`` and tab ``\t`` characters are stripped from the 1489URL by the parser in :mod:`urllib.parse` preventing such attacks. The removal 1490characters are controlled by a new module level variable 1491``urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE``. (See :issue:`43882`) 1492 1493The presence of newline or tab characters in parts of a URL allows for some 1494forms of attacks. Following the WHATWG specification that updates :rfc:`3986`, 1495ASCII newline ``\n``, ``\r`` and tab ``\t`` characters are stripped from the 1496URL by the parser in :mod:`urllib.parse` preventing such attacks. The removal 1497characters are controlled by a new module level variable 1498``urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE``. (See :issue:`43882`) 1499 1500xml 1501--- 1502 1503Add a :class:`~xml.sax.handler.LexicalHandler` class to the 1504:mod:`xml.sax.handler` module. 1505(Contributed by Jonathan Gossage and Zackery Spytz in :issue:`35018`.) 1506 1507zipimport 1508--------- 1509Add methods related to :pep:`451`: :meth:`~zipimport.zipimporter.find_spec`, 1510:meth:`zipimport.zipimporter.create_module`, and 1511:meth:`zipimport.zipimporter.exec_module`. 1512(Contributed by Brett Cannon in :issue:`42131`.) 1513 1514Add :meth:`~zipimport.zipimporter.invalidate_caches` method. 1515(Contributed by Desmond Cheong in :issue:`14678`.) 1516 1517 1518Optimizations 1519============= 1520 1521* Constructors :func:`str`, :func:`bytes` and :func:`bytearray` are now faster 1522 (around 30--40% for small objects). 1523 (Contributed by Serhiy Storchaka in :issue:`41334`.) 1524 1525* The :mod:`runpy` module now imports fewer modules. 1526 The ``python3 -m module-name`` command startup time is 1.4x faster in 1527 average. On Linux, ``python3 -I -m module-name`` imports 69 modules on Python 1528 3.9, whereas it only imports 51 modules (-18) on Python 3.10. 1529 (Contributed by Victor Stinner in :issue:`41006` and :issue:`41718`.) 1530 1531* The ``LOAD_ATTR`` instruction now uses new "per opcode cache" mechanism. It 1532 is about 36% faster now for regular attributes and 44% faster for slots. 1533 (Contributed by Pablo Galindo and Yury Selivanov in :issue:`42093` and Guido 1534 van Rossum in :issue:`42927`, based on ideas implemented originally in PyPy 1535 and MicroPython.) 1536 1537* When building Python with :option:`--enable-optimizations` now 1538 ``-fno-semantic-interposition`` is added to both the compile and link line. 1539 This speeds builds of the Python interpreter created with :option:`--enable-shared` 1540 with ``gcc`` by up to 30%. See `this article 1541 <https://developers.redhat.com/blog/2020/06/25/red-hat-enterprise-linux-8-2-brings-faster-python-3-8-run-speeds/>`_ 1542 for more details. (Contributed by Victor Stinner and Pablo Galindo in 1543 :issue:`38980`.) 1544 1545* Use a new output buffer management code for :mod:`bz2` / :mod:`lzma` / 1546 :mod:`zlib` modules, and add ``.readall()`` function to 1547 ``_compression.DecompressReader`` class. bz2 decompression is now 1.09x ~ 1.17x 1548 faster, lzma decompression 1.20x ~ 1.32x faster, ``GzipFile.read(-1)`` 1.11x 1549 ~ 1.18x faster. (Contributed by Ma Lin, reviewed by Gregory P. Smith, in :issue:`41486`) 1550 1551* When using stringized annotations, annotations dicts for functions are no longer 1552 created when the function is created. Instead, they are stored as a tuple of 1553 strings, and the function object lazily converts this into the annotations dict 1554 on demand. This optimization cuts the CPU time needed to define an annotated 1555 function by half. 1556 (Contributed by Yurii Karabas and Inada Naoki in :issue:`42202`) 1557 1558* Substring search functions such as ``str1 in str2`` and ``str2.find(str1)`` 1559 now sometimes use Crochemore & Perrin's "Two-Way" string searching 1560 algorithm to avoid quadratic behavior on long strings. (Contributed 1561 by Dennis Sweeney in :issue:`41972`) 1562 1563* Add micro-optimizations to ``_PyType_Lookup()`` to improve type attribute cache lookup 1564 performance in the common case of cache hits. This makes the interpreter 1.04 times faster 1565 on average. (Contributed by Dino Viehland in :issue:`43452`) 1566 1567* The following built-in functions now support the faster :pep:`590` vectorcall calling convention: 1568 :func:`map`, :func:`filter`, :func:`reversed`, :func:`bool` and :func:`float`. 1569 (Contributed by Dong-hee Na and Jeroen Demeyer in :issue:`43575`, :issue:`43287`, :issue:`41922`, :issue:`41873` and :issue:`41870`) 1570 1571* :class:`BZ2File` performance is improved by removing internal ``RLock``. 1572 This makes :class:`BZ2File` thread unsafe in the face of multiple simultaneous 1573 readers or writers, just like its equivalent classes in :mod:`gzip` and 1574 :mod:`lzma` have always been. (Contributed by Inada Naoki in :issue:`43785`). 1575 1576.. _whatsnew310-deprecated: 1577 1578Deprecated 1579========== 1580 1581* Currently Python accepts numeric literals immediately followed by keywords, 1582 for example ``0in x``, ``1or x``, ``0if 1else 2``. It allows confusing 1583 and ambiguous expressions like ``[0x1for x in y]`` (which can be 1584 interpreted as ``[0x1 for x in y]`` or ``[0x1f or x in y]``). Starting in 1585 this release, a deprecation warning is raised if the numeric literal is 1586 immediately followed by one of keywords :keyword:`and`, :keyword:`else`, 1587 :keyword:`for`, :keyword:`if`, :keyword:`in`, :keyword:`is` and :keyword:`or`. 1588 In future releases it will be changed to syntax warning, and finally to 1589 syntax error. 1590 (Contributed by Serhiy Storchaka in :issue:`43833`). 1591 1592* Starting in this release, there will be a concerted effort to begin 1593 cleaning up old import semantics that were kept for Python 2.7 1594 compatibility. Specifically, 1595 :meth:`~importlib.abc.PathEntryFinder.find_loader`/:meth:`~importlib.abc.Finder.find_module` 1596 (superseded by :meth:`~importlib.abc.Finder.find_spec`), 1597 :meth:`~importlib.abc.Loader.load_module` 1598 (superseded by :meth:`~importlib.abc.Loader.exec_module`), 1599 :meth:`~importlib.abc.Loader.module_repr` (which the import system 1600 takes care of for you), the ``__package__`` attribute 1601 (superseded by ``__spec__.parent``), the ``__loader__`` attribute 1602 (superseded by ``__spec__.loader``), and the ``__cached__`` attribute 1603 (superseded by ``__spec__.cached``) will slowly be removed (as well 1604 as other classes and methods in :mod:`importlib`). 1605 :exc:`ImportWarning` and/or :exc:`DeprecationWarning` will be raised 1606 as appropriate to help identify code which needs updating during 1607 this transition. 1608 1609* The entire ``distutils`` namespace is deprecated, to be removed in 1610 Python 3.12. Refer to the :ref:`module changes <distutils-deprecated>` 1611 section for more information. 1612 1613* Non-integer arguments to :func:`random.randrange` are deprecated. 1614 The :exc:`ValueError` is deprecated in favor of a :exc:`TypeError`. 1615 (Contributed by Serhiy Storchaka and Raymond Hettinger in :issue:`37319`.) 1616 1617* The various ``load_module()`` methods of :mod:`importlib` have been 1618 documented as deprecated since Python 3.6, but will now also trigger 1619 a :exc:`DeprecationWarning`. Use 1620 :meth:`~importlib.abc.Loader.exec_module` instead. 1621 (Contributed by Brett Cannon in :issue:`26131`.) 1622 1623* :meth:`zimport.zipimporter.load_module` has been deprecated in 1624 preference for :meth:`~zipimport.zipimporter.exec_module`. 1625 (Contributed by Brett Cannon in :issue:`26131`.) 1626 1627* The use of :meth:`~importlib.abc.Loader.load_module` by the import 1628 system now triggers an :exc:`ImportWarning` as 1629 :meth:`~importlib.abc.Loader.exec_module` is preferred. 1630 (Contributed by Brett Cannon in :issue:`26131`.) 1631 1632* The use of :meth:`importlib.abc.MetaPathFinder.find_module` and 1633 :meth:`importlib.abc.PathEntryFinder.find_module` by the import system now 1634 trigger an :exc:`ImportWarning` as 1635 :meth:`importlib.abc.MetaPathFinder.find_spec` and 1636 :meth:`importlib.abc.PathEntryFinder.find_spec` 1637 are preferred, respectively. You can use 1638 :func:`importlib.util.spec_from_loader` to help in porting. 1639 (Contributed by Brett Cannon in :issue:`42134`.) 1640 1641* The use of :meth:`importlib.abc.PathEntryFinder.find_loader` by the import 1642 system now triggers an :exc:`ImportWarning` as 1643 :meth:`importlib.abc.PathEntryFinder.find_spec` is preferred. You can use 1644 :func:`importlib.util.spec_from_loader` to help in porting. 1645 (Contributed by Brett Cannon in :issue:`43672`.) 1646 1647* The various implementations of 1648 :meth:`importlib.abc.MetaPathFinder.find_module` ( 1649 :meth:`importlib.machinery.BuiltinImporter.find_module`, 1650 :meth:`importlib.machinery.FrozenImporter.find_module`, 1651 :meth:`importlib.machinery.WindowsRegistryFinder.find_module`, 1652 :meth:`importlib.machinery.PathFinder.find_module`, 1653 :meth:`importlib.abc.MetaPathFinder.find_module` ), 1654 :meth:`importlib.abc.PathEntryFinder.find_module` ( 1655 :meth:`importlib.machinery.FileFinder.find_module` ), and 1656 :meth:`importlib.abc.PathEntryFinder.find_loader` ( 1657 :meth:`importlib.machinery.FileFinder.find_loader` ) 1658 now raise :exc:`DeprecationWarning` and are slated for removal in 1659 Python 3.12 (previously they were documented as deprecated in Python 3.4). 1660 (Contributed by Brett Cannon in :issue:`42135`.) 1661 1662* :class:`importlib.abc.Finder` is deprecated (including its sole method, 1663 :meth:`~importlib.abc.Finder.find_module`). Both 1664 :class:`importlib.abc.MetaPathFinder` and :class:`importlib.abc.PathEntryFinder` 1665 no longer inherit from the class. Users should inherit from one of these two 1666 classes as appropriate instead. 1667 (Contributed by Brett Cannon in :issue:`42135`.) 1668 1669* The deprecations of :mod:`imp`, :func:`importlib.find_loader`, 1670 :func:`importlib.util.set_package_wrapper`, 1671 :func:`importlib.util.set_loader_wrapper`, 1672 :func:`importlib.util.module_for_loader`, 1673 :class:`pkgutil.ImpImporter`, and 1674 :class:`pkgutil.ImpLoader` have all been updated to list Python 3.12 as the 1675 slated version of removal (they began raising :exc:`DeprecationWarning` in 1676 previous versions of Python). 1677 (Contributed by Brett Cannon in :issue:`43720`.) 1678 1679* The import system now uses the ``__spec__`` attribute on modules before 1680 falling back on :meth:`~importlib.abc.Loader.module_repr` for a module's 1681 ``__repr__()`` method. Removal of the use of ``module_repr()`` is scheduled 1682 for Python 3.12. 1683 (Contributed by Brett Cannon in :issue:`42137`.) 1684 1685* :meth:`importlib.abc.Loader.module_repr`, 1686 :meth:`importlib.machinery.FrozenLoader.module_repr`, and 1687 :meth:`importlib.machinery.BuiltinLoader.module_repr` are deprecated and 1688 slated for removal in Python 3.12. 1689 (Contributed by Brett Cannon in :issue:`42136`.) 1690 1691* ``sqlite3.OptimizedUnicode`` has been undocumented and obsolete since Python 1692 3.3, when it was made an alias to :class:`str`. It is now deprecated, 1693 scheduled for removal in Python 3.12. 1694 (Contributed by Erlend E. Aasland in :issue:`42264`.) 1695 1696* :func:`asyncio.get_event_loop` now emits a deprecation warning if there is 1697 no running event loop. In the future it will be an alias of 1698 :func:`~asyncio.get_running_loop`. 1699 :mod:`asyncio` functions which implicitly create :class:`~asyncio.Future` 1700 or :class:`~asyncio.Task` objects now emit 1701 a deprecation warning if there is no running event loop and no explicit 1702 *loop* argument is passed: :func:`~asyncio.ensure_future`, 1703 :func:`~asyncio.wrap_future`, :func:`~asyncio.gather`, 1704 :func:`~asyncio.shield`, :func:`~asyncio.as_completed` and constructors of 1705 :class:`~asyncio.Future`, :class:`~asyncio.Task`, 1706 :class:`~asyncio.StreamReader`, :class:`~asyncio.StreamReaderProtocol`. 1707 (Contributed by Serhiy Storchaka in :issue:`39529`.) 1708 1709* The undocumented built-in function ``sqlite3.enable_shared_cache`` is now 1710 deprecated, scheduled for removal in Python 3.12. Its use is strongly 1711 discouraged by the SQLite3 documentation. See `the SQLite3 docs 1712 <https://sqlite.org/c3ref/enable_shared_cache.html>`_ for more details. 1713 If a shared cache must be used, open the database in URI mode using the 1714 ``cache=shared`` query parameter. 1715 (Contributed by Erlend E. Aasland in :issue:`24464`.) 1716 1717* The following ``threading`` methods are now deprecated: 1718 1719 * ``threading.currentThread`` => :func:`threading.current_thread` 1720 1721 * ``threading.activeCount`` => :func:`threading.active_count` 1722 1723 * ``threading.Condition.notifyAll`` => 1724 :meth:`threading.Condition.notify_all` 1725 1726 * ``threading.Event.isSet`` => :meth:`threading.Event.is_set` 1727 1728 * ``threading.Thread.setName`` => :attr:`threading.Thread.name` 1729 1730 * ``threading.thread.getName`` => :attr:`threading.Thread.name` 1731 1732 * ``threading.Thread.isDaemon`` => :attr:`threading.Thread.daemon` 1733 1734 * ``threading.Thread.setDaemon`` => :attr:`threading.Thread.daemon` 1735 1736 (Contributed by Jelle Zijlstra in :issue:`21574`.) 1737 1738* :meth:`pathlib.Path.link_to` is deprecated and slated for removal in 1739 Python 3.12. Use :meth:`pathlib.Path.hardlink_to` instead. 1740 (Contributed by Barney Gale in :issue:`39950`.) 1741 1742* ``cgi.log()`` is deprecated and slated for removal in Python 3.12. 1743 (Contributed by Inada Naoki in :issue:`41139`.) 1744 1745* The following :mod:`ssl` features have been deprecated since Python 3.6, 1746 Python 3.7, or OpenSSL 1.1.0 and will be removed in 3.11: 1747 1748 * :data:`~ssl.OP_NO_SSLv2`, :data:`~ssl.OP_NO_SSLv3`, :data:`~ssl.OP_NO_TLSv1`, 1749 :data:`~ssl.OP_NO_TLSv1_1`, :data:`~ssl.OP_NO_TLSv1_2`, and 1750 :data:`~ssl.OP_NO_TLSv1_3` are replaced by 1751 :attr:`sslSSLContext.minimum_version` and 1752 :attr:`sslSSLContext.maximum_version`. 1753 1754 * :data:`~ssl.PROTOCOL_SSLv2`, :data:`~ssl.PROTOCOL_SSLv3`, 1755 :data:`~ssl.PROTOCOL_SSLv23`, :data:`~ssl.PROTOCOL_TLSv1`, 1756 :data:`~ssl.PROTOCOL_TLSv1_1`, :data:`~ssl.PROTOCOL_TLSv1_2`, and 1757 :data:`~ssl.PROTOCOL_TLS` are deprecated in favor of 1758 :data:`~ssl.PROTOCOL_TLS_CLIENT` and :data:`~ssl.PROTOCOL_TLS_SERVER` 1759 1760 * :func:`~ssl.wrap_socket` is replaced by :meth:`ssl.SSLContext.wrap_socket` 1761 1762 * :func:`~ssl.match_hostname` 1763 1764 * :func:`~ssl.RAND_pseudo_bytes`, :func:`~ssl.RAND_egd` 1765 1766 * NPN features like :meth:`ssl.SSLSocket.selected_npn_protocol` and 1767 :meth:`ssl.SSLContext.set_npn_protocols` are replaced by ALPN. 1768 1769* The threading debug (:envvar:`PYTHONTHREADDEBUG` environment variable) is 1770 deprecated in Python 3.10 and will be removed in Python 3.12. This feature 1771 requires a :ref:`debug build of Python <debug-build>`. 1772 (Contributed by Victor Stinner in :issue:`44584`.) 1773 1774* Importing from the ``typing.io`` and ``typing.re`` submodules will now emit 1775 :exc:`DeprecationWarning`. These submodules will be removed in a future version 1776 of Python. Anything belonging to these submodules should be imported directly 1777 from :mod:`typing` instead. 1778 (Contributed by Sebastian Rittau in :issue:`38291`) 1779 1780.. _whatsnew310-removed: 1781 1782Removed 1783======= 1784 1785* Removed special methods ``__int__``, ``__float__``, ``__floordiv__``, 1786 ``__mod__``, ``__divmod__``, ``__rfloordiv__``, ``__rmod__`` and 1787 ``__rdivmod__`` of the :class:`complex` class. They always raised 1788 a :exc:`TypeError`. 1789 (Contributed by Serhiy Storchaka in :issue:`41974`.) 1790 1791* The ``ParserBase.error()`` method from the private and undocumented ``_markupbase`` 1792 module has been removed. :class:`html.parser.HTMLParser` is the only subclass of 1793 ``ParserBase`` and its ``error()`` implementation was already removed in 1794 Python 3.5. 1795 (Contributed by Berker Peksag in :issue:`31844`.) 1796 1797* Removed the ``unicodedata.ucnhash_CAPI`` attribute which was an internal 1798 PyCapsule object. The related private ``_PyUnicode_Name_CAPI`` structure was 1799 moved to the internal C API. 1800 (Contributed by Victor Stinner in :issue:`42157`.) 1801 1802* Removed the ``parser`` module, which was deprecated in 3.9 due to the 1803 switch to the new PEG parser, as well as all the C source and header files 1804 that were only being used by the old parser, including ``node.h``, ``parser.h``, 1805 ``graminit.h`` and ``grammar.h``. 1806 1807* Removed the Public C API functions ``PyParser_SimpleParseStringFlags``, 1808 ``PyParser_SimpleParseStringFlagsFilename``, 1809 ``PyParser_SimpleParseFileFlags`` and ``PyNode_Compile`` 1810 that were deprecated in 3.9 due to the switch to the new PEG parser. 1811 1812* Removed the ``formatter`` module, which was deprecated in Python 3.4. 1813 It is somewhat obsolete, little used, and not tested. It was originally 1814 scheduled to be removed in Python 3.6, but such removals were delayed until 1815 after Python 2.7 EOL. Existing users should copy whatever classes they use 1816 into their code. 1817 (Contributed by Dong-hee Na and Terry J. Reedy in :issue:`42299`.) 1818 1819* Removed the :c:func:`PyModule_GetWarningsModule` function that was useless 1820 now due to the _warnings module was converted to a builtin module in 2.6. 1821 (Contributed by Hai Shi in :issue:`42599`.) 1822 1823* Remove deprecated aliases to :ref:`collections-abstract-base-classes` from 1824 the :mod:`collections` module. 1825 (Contributed by Victor Stinner in :issue:`37324`.) 1826 1827* The ``loop`` parameter has been removed from most of :mod:`asyncio`\ 's 1828 :doc:`high-level API <../library/asyncio-api-index>` following deprecation 1829 in Python 3.8. The motivation behind this change is multifold: 1830 1831 1. This simplifies the high-level API. 1832 2. The functions in the high-level API have been implicitly getting the 1833 current thread's running event loop since Python 3.7. There isn't a need to 1834 pass the event loop to the API in most normal use cases. 1835 3. Event loop passing is error-prone especially when dealing with loops 1836 running in different threads. 1837 1838 Note that the low-level API will still accept ``loop``. 1839 See :ref:`changes-python-api` for examples of how to replace existing code. 1840 1841 (Contributed by Yurii Karabas, Andrew Svetlov, Yury Selivanov and Kyle Stanley 1842 in :issue:`42392`.) 1843 1844 1845Porting to Python 3.10 1846====================== 1847 1848This section lists previously described changes and other bugfixes 1849that may require changes to your code. 1850 1851 1852Changes in the Python syntax 1853---------------------------- 1854 1855* Deprecation warning is now emitted when compiling previously valid syntax 1856 if the numeric literal is immediately followed by a keyword (like in ``0in x``). 1857 In future releases it will be changed to syntax warning, and finally to a 1858 syntax error. To get rid of the warning and make the code compatible with 1859 future releases just add a space between the numeric literal and the 1860 following keyword. 1861 (Contributed by Serhiy Storchaka in :issue:`43833`). 1862 1863.. _changes-python-api: 1864 1865Changes in the Python API 1866------------------------- 1867 1868* The *etype* parameters of the :func:`~traceback.format_exception`, 1869 :func:`~traceback.format_exception_only`, and 1870 :func:`~traceback.print_exception` functions in the :mod:`traceback` module 1871 have been renamed to *exc*. 1872 (Contributed by Zackery Spytz and Matthias Bussonnier in :issue:`26389`.) 1873 1874* :mod:`atexit`: At Python exit, if a callback registered with 1875 :func:`atexit.register` fails, its exception is now logged. Previously, only 1876 some exceptions were logged, and the last exception was always silently 1877 ignored. 1878 (Contributed by Victor Stinner in :issue:`42639`.) 1879 1880* :class:`collections.abc.Callable` generic now flattens type parameters, similar 1881 to what :data:`typing.Callable` currently does. This means that 1882 ``collections.abc.Callable[[int, str], str]`` will have ``__args__`` of 1883 ``(int, str, str)``; previously this was ``([int, str], str)``. Code which 1884 accesses the arguments via :func:`typing.get_args` or ``__args__`` need to account 1885 for this change. Furthermore, :exc:`TypeError` may be raised for invalid forms 1886 of parameterizing :class:`collections.abc.Callable` which may have passed 1887 silently in Python 3.9. 1888 (Contributed by Ken Jin in :issue:`42195`.) 1889 1890* :meth:`socket.htons` and :meth:`socket.ntohs` now raise :exc:`OverflowError` 1891 instead of :exc:`DeprecationWarning` if the given parameter will not fit in 1892 a 16-bit unsigned integer. 1893 (Contributed by Erlend E. Aasland in :issue:`42393`.) 1894 1895* The ``loop`` parameter has been removed from most of :mod:`asyncio`\ 's 1896 :doc:`high-level API <../library/asyncio-api-index>` following deprecation 1897 in Python 3.8. 1898 1899 A coroutine that currently looks like this:: 1900 1901 async def foo(loop): 1902 await asyncio.sleep(1, loop=loop) 1903 1904 Should be replaced with this:: 1905 1906 async def foo(): 1907 await asyncio.sleep(1) 1908 1909 If ``foo()`` was specifically designed *not* to run in the current thread's 1910 running event loop (e.g. running in another thread's event loop), consider 1911 using :func:`asyncio.run_coroutine_threadsafe` instead. 1912 1913 (Contributed by Yurii Karabas, Andrew Svetlov, Yury Selivanov and Kyle Stanley 1914 in :issue:`42392`.) 1915 1916* The :data:`types.FunctionType` constructor now inherits the current builtins 1917 if the *globals* dictionary has no ``"__builtins__"`` key, rather than using 1918 ``{"None": None}`` as builtins: same behavior as :func:`eval` and 1919 :func:`exec` functions. Defining a function with ``def function(...): ...`` 1920 in Python is not affected, globals cannot be overridden with this syntax: it 1921 also inherits the current builtins. 1922 (Contributed by Victor Stinner in :issue:`42990`.) 1923 1924Changes in the C API 1925-------------------- 1926 1927* The C API functions ``PyParser_SimpleParseStringFlags``, 1928 ``PyParser_SimpleParseStringFlagsFilename``, 1929 ``PyParser_SimpleParseFileFlags``, ``PyNode_Compile`` and the type 1930 used by these functions, ``struct _node``, were removed due to the switch 1931 to the new PEG parser. 1932 1933 Source should be now be compiled directly to a code object using, for 1934 example, :c:func:`Py_CompileString`. The resulting code object can then be 1935 evaluated using, for example, :c:func:`PyEval_EvalCode`. 1936 1937 Specifically: 1938 1939 * A call to ``PyParser_SimpleParseStringFlags`` followed by 1940 ``PyNode_Compile`` can be replaced by calling :c:func:`Py_CompileString`. 1941 1942 * There is no direct replacement for ``PyParser_SimpleParseFileFlags``. 1943 To compile code from a ``FILE *`` argument, you will need to read 1944 the file in C and pass the resulting buffer to :c:func:`Py_CompileString`. 1945 1946 * To compile a file given a ``char *`` filename, explicitly open the file, read 1947 it and compile the result. One way to do this is using the :py:mod:`io` 1948 module with :c:func:`PyImport_ImportModule`, :c:func:`PyObject_CallMethod`, 1949 :c:func:`PyBytes_AsString` and :c:func:`Py_CompileString`, 1950 as sketched below. (Declarations and error handling are omitted.) :: 1951 1952 io_module = Import_ImportModule("io"); 1953 fileobject = PyObject_CallMethod(io_module, "open", "ss", filename, "rb"); 1954 source_bytes_object = PyObject_CallMethod(fileobject, "read", ""); 1955 result = PyObject_CallMethod(fileobject, "close", ""); 1956 source_buf = PyBytes_AsString(source_bytes_object); 1957 code = Py_CompileString(source_buf, filename, Py_file_input); 1958 1959 * For ``FrameObject`` objects, the ``f_lasti`` member now represents a wordcode 1960 offset instead of a simple offset into the bytecode string. This means that this 1961 number needs to be multiplied by 2 to be used with APIs that expect a byte offset 1962 instead (like :c:func:`PyCode_Addr2Line` for example). Notice as well that the 1963 ``f_lasti`` member of ``FrameObject`` objects is not considered stable: please 1964 use :c:func:`PyFrame_GetLineNumber` instead. 1965 1966CPython bytecode changes 1967======================== 1968 1969* The ``MAKE_FUNCTION`` instruction now accepts either a dict or a tuple of 1970 strings as the function's annotations. 1971 (Contributed by Yurii Karabas and Inada Naoki in :issue:`42202`) 1972 1973Build Changes 1974============= 1975 1976* :pep:`644`: Python now requires OpenSSL 1.1.1 or newer. OpenSSL 1.0.2 is no 1977 longer supported. 1978 (Contributed by Christian Heimes in :issue:`43669`.) 1979 1980* The C99 functions :c:func:`snprintf` and :c:func:`vsnprintf` are now required 1981 to build Python. 1982 (Contributed by Victor Stinner in :issue:`36020`.) 1983 1984* :mod:`sqlite3` requires SQLite 3.7.15 or higher. (Contributed by Sergey Fedoseev 1985 and Erlend E. Aasland in :issue:`40744` and :issue:`40810`.) 1986 1987* The :mod:`atexit` module must now always be built as a built-in module. 1988 (Contributed by Victor Stinner in :issue:`42639`.) 1989 1990* Add :option:`--disable-test-modules` option to the ``configure`` script: 1991 don't build nor install test modules. 1992 (Contributed by Xavier de Gaye, Thomas Petazzoni and Peixing Xin in :issue:`27640`.) 1993 1994* Add :option:`--with-wheel-pkg-dir=PATH option <--with-wheel-pkg-dir>` 1995 to the ``./configure`` script. If 1996 specified, the :mod:`ensurepip` module looks for ``setuptools`` and ``pip`` 1997 wheel packages in this directory: if both are present, these wheel packages 1998 are used instead of ensurepip bundled wheel packages. 1999 2000 Some Linux distribution packaging policies recommend against bundling 2001 dependencies. For example, Fedora installs wheel packages in the 2002 ``/usr/share/python-wheels/`` directory and don't install the 2003 ``ensurepip._bundled`` package. 2004 2005 (Contributed by Victor Stinner in :issue:`42856`.) 2006 2007* Add a new :option:`configure --without-static-libpython option 2008 <--without-static-libpython>` to not build the ``libpythonMAJOR.MINOR.a`` 2009 static library and not install the ``python.o`` object file. 2010 2011 (Contributed by Victor Stinner in :issue:`43103`.) 2012 2013* The ``configure`` script now uses the ``pkg-config`` utility, if available, 2014 to detect the location of Tcl/Tk headers and libraries. As before, those 2015 locations can be explicitly specified with the :option:`--with-tcltk-includes` 2016 and :option:`--with-tcltk-libs` configuration options. 2017 (Contributed by Manolis Stamatogiannakis in :issue:`42603`.) 2018 2019* Add :option:`--with-openssl-rpath` option to ``configure`` script. The option 2020 simplifies building Python with a custom OpenSSL installation, e.g. 2021 ``./configure --with-openssl=/path/to/openssl --with-openssl-rpath=auto``. 2022 (Contributed by Christian Heimes in :issue:`43466`.) 2023 2024 2025C API Changes 2026============= 2027 2028PEP 652: Maintaining the Stable ABI 2029----------------------------------- 2030 2031The Stable ABI (Application Binary Interface) for extension modules or 2032embedding Python is now explicitly defined. 2033:ref:`stable` describes C API and ABI stability guarantees along with best 2034practices for using the Stable ABI. 2035 2036(Contributed by Petr Viktorin in :pep:`652` and :issue:`43795`.) 2037 2038New Features 2039------------ 2040 2041* The result of :c:func:`PyNumber_Index` now always has exact type :class:`int`. 2042 Previously, the result could have been an instance of a subclass of ``int``. 2043 (Contributed by Serhiy Storchaka in :issue:`40792`.) 2044 2045* Add a new :c:member:`~PyConfig.orig_argv` member to the :c:type:`PyConfig` 2046 structure: the list of the original command line arguments passed to the 2047 Python executable. 2048 (Contributed by Victor Stinner in :issue:`23427`.) 2049 2050* The :c:func:`PyDateTime_DATE_GET_TZINFO` and 2051 :c:func:`PyDateTime_TIME_GET_TZINFO` macros have been added for accessing 2052 the ``tzinfo`` attributes of :class:`datetime.datetime` and 2053 :class:`datetime.time` objects. 2054 (Contributed by Zackery Spytz in :issue:`30155`.) 2055 2056* Add a :c:func:`PyCodec_Unregister` function to unregister a codec 2057 search function. 2058 (Contributed by Hai Shi in :issue:`41842`.) 2059 2060* The :c:func:`PyIter_Send` function was added to allow 2061 sending value into iterator without raising ``StopIteration`` exception. 2062 (Contributed by Vladimir Matveev in :issue:`41756`.) 2063 2064* Add :c:func:`PyUnicode_AsUTF8AndSize` to the limited C API. 2065 (Contributed by Alex Gaynor in :issue:`41784`.) 2066 2067* Add :c:func:`PyModule_AddObjectRef` function: similar to 2068 :c:func:`PyModule_AddObject` but don't steal a reference to the value on 2069 success. 2070 (Contributed by Victor Stinner in :issue:`1635741`.) 2071 2072* Add :c:func:`Py_NewRef` and :c:func:`Py_XNewRef` functions to increment the 2073 reference count of an object and return the object. 2074 (Contributed by Victor Stinner in :issue:`42262`.) 2075 2076* The :c:func:`PyType_FromSpecWithBases` and :c:func:`PyType_FromModuleAndSpec` 2077 functions now accept a single class as the *bases* argument. 2078 (Contributed by Serhiy Storchaka in :issue:`42423`.) 2079 2080* The :c:func:`PyType_FromModuleAndSpec` function now accepts NULL ``tp_doc`` 2081 slot. 2082 (Contributed by Hai Shi in :issue:`41832`.) 2083 2084* The :c:func:`PyType_GetSlot` function can accept 2085 :ref:`static types <static-types>`. 2086 (Contributed by Hai Shi and Petr Viktorin in :issue:`41073`.) 2087 2088* Add a new :c:func:`PySet_CheckExact` function to the C-API to check if an 2089 object is an instance of :class:`set` but not an instance of a subtype. 2090 (Contributed by Pablo Galindo in :issue:`43277`.) 2091 2092* Add :c:func:`PyErr_SetInterruptEx` which allows passing a signal number 2093 to simulate. 2094 (Contributed by Antoine Pitrou in :issue:`43356`.) 2095 2096* The limited C API is now supported if :ref:`Python is built in debug mode 2097 <debug-build>` (if the ``Py_DEBUG`` macro is defined). In the limited C API, 2098 the :c:func:`Py_INCREF` and :c:func:`Py_DECREF` functions are now implemented 2099 as opaque function 2100 calls, rather than accessing directly the :c:member:`PyObject.ob_refcnt` 2101 member, if Python is built in debug mode and the ``Py_LIMITED_API`` macro 2102 targets Python 3.10 or newer. It became possible to support the limited C API 2103 in debug mode because the :c:type:`PyObject` structure is the same in release 2104 and debug mode since Python 3.8 (see :issue:`36465`). 2105 2106 The limited C API is still not supported in the :option:`--with-trace-refs` 2107 special build (``Py_TRACE_REFS`` macro). 2108 (Contributed by Victor Stinner in :issue:`43688`.) 2109 2110* Add the :c:func:`Py_Is(x, y) <Py_Is>` function to test if the *x* object is 2111 the *y* object, the same as ``x is y`` in Python. Add also the 2112 :c:func:`Py_IsNone`, :c:func:`Py_IsTrue`, :c:func:`Py_IsFalse` functions to 2113 test if an object is, respectively, the ``None`` singleton, the ``True`` 2114 singleton or the ``False`` singleton. 2115 (Contributed by Victor Stinner in :issue:`43753`.) 2116 2117* Add new functions to control the garbage collector from C code: 2118 :c:func:`PyGC_Enable()`, 2119 :c:func:`PyGC_Disable()`, 2120 :c:func:`PyGC_IsEnabled()`. 2121 These functions allow to activate, deactivate and query the state of the garbage collector from C code without 2122 having to import the :mod:`gc` module. 2123 2124* Add a new :c:data:`Py_TPFLAGS_DISALLOW_INSTANTIATION` type flag to disallow 2125 creating type instances. 2126 (Contributed by Victor Stinner in :issue:`43916`.) 2127 2128* Add a new :c:data:`Py_TPFLAGS_IMMUTABLETYPE` type flag for creating immutable 2129 type objects: type attributes cannot be set nor deleted. 2130 (Contributed by Victor Stinner and Erlend E. Aasland in :issue:`43908`.) 2131 2132Porting to Python 3.10 2133---------------------- 2134 2135* The ``PY_SSIZE_T_CLEAN`` macro must now be defined to use 2136 :c:func:`PyArg_ParseTuple` and :c:func:`Py_BuildValue` formats which use 2137 ``#``: ``es#``, ``et#``, ``s#``, ``u#``, ``y#``, ``z#``, ``U#`` and ``Z#``. 2138 See :ref:`Parsing arguments and building values 2139 <arg-parsing>` and the :pep:`353`. 2140 (Contributed by Victor Stinner in :issue:`40943`.) 2141 2142* Since :c:func:`Py_REFCNT()` is changed to the inline static function, 2143 ``Py_REFCNT(obj) = new_refcnt`` must be replaced with ``Py_SET_REFCNT(obj, new_refcnt)``: 2144 see :c:func:`Py_SET_REFCNT()` (available since Python 3.9). For backward 2145 compatibility, this macro can be used:: 2146 2147 #if PY_VERSION_HEX < 0x030900A4 2148 # define Py_SET_REFCNT(obj, refcnt) ((Py_REFCNT(obj) = (refcnt)), (void)0) 2149 #endif 2150 2151 (Contributed by Victor Stinner in :issue:`39573`.) 2152 2153* Calling :c:func:`PyDict_GetItem` without :term:`GIL` held had been allowed 2154 for historical reason. It is no longer allowed. 2155 (Contributed by Victor Stinner in :issue:`40839`.) 2156 2157* ``PyUnicode_FromUnicode(NULL, size)`` and ``PyUnicode_FromStringAndSize(NULL, size)`` 2158 raise ``DeprecationWarning`` now. Use :c:func:`PyUnicode_New` to allocate 2159 Unicode object without initial data. 2160 (Contributed by Inada Naoki in :issue:`36346`.) 2161 2162* The private ``_PyUnicode_Name_CAPI`` structure of the PyCapsule API 2163 ``unicodedata.ucnhash_CAPI`` has been moved to the internal C API. 2164 (Contributed by Victor Stinner in :issue:`42157`.) 2165 2166* :c:func:`Py_GetPath`, :c:func:`Py_GetPrefix`, :c:func:`Py_GetExecPrefix`, 2167 :c:func:`Py_GetProgramFullPath`, :c:func:`Py_GetPythonHome` and 2168 :c:func:`Py_GetProgramName` functions now return ``NULL`` if called before 2169 :c:func:`Py_Initialize` (before Python is initialized). Use the new 2170 :ref:`Python Initialization Configuration API <init-config>` to get the 2171 :ref:`Python Path Configuration. <init-path-config>`. 2172 (Contributed by Victor Stinner in :issue:`42260`.) 2173 2174* :c:func:`PyList_SET_ITEM`, :c:func:`PyTuple_SET_ITEM` and 2175 :c:func:`PyCell_SET` macros can no longer be used as l-value or r-value. 2176 For example, ``x = PyList_SET_ITEM(a, b, c)`` and 2177 ``PyList_SET_ITEM(a, b, c) = x`` now fail with a compiler error. It prevents 2178 bugs like ``if (PyList_SET_ITEM (a, b, c) < 0) ...`` test. 2179 (Contributed by Zackery Spytz and Victor Stinner in :issue:`30459`.) 2180 2181* The non-limited API files ``odictobject.h``, ``parser_interface.h``, 2182 ``picklebufobject.h``, ``pyarena.h``, ``pyctype.h``, ``pydebug.h``, 2183 ``pyfpe.h``, and ``pytime.h`` have been moved to the ``Include/cpython`` 2184 directory. These files must not be included directly, as they are already 2185 included in ``Python.h``: :ref:`Include Files <api-includes>`. If they have 2186 been included directly, consider including ``Python.h`` instead. 2187 (Contributed by Nicholas Sim in :issue:`35134`) 2188 2189* Use the :c:data:`Py_TPFLAGS_IMMUTABLETYPE` type flag to create immutable type 2190 objects. Do not rely on :c:data:`Py_TPFLAGS_HEAPTYPE` to decide if a type 2191 object is mutable or not; check if :c:data:`Py_TPFLAGS_IMMUTABLETYPE` is set 2192 instead. 2193 (Contributed by Victor Stinner and Erlend E. Aasland in :issue:`43908`.) 2194 2195* The undocumented function ``Py_FrozenMain`` has been removed from the 2196 limited API. The function is mainly useful for custom builds of Python. 2197 (Contributed by Petr Viktorin in :issue:`26241`) 2198 2199Deprecated 2200---------- 2201 2202* The ``PyUnicode_InternImmortal()`` function is now deprecated 2203 and will be removed in Python 3.12: use :c:func:`PyUnicode_InternInPlace` 2204 instead. 2205 (Contributed by Victor Stinner in :issue:`41692`.) 2206 2207Removed 2208------- 2209 2210* Removed ``Py_UNICODE_str*`` functions manipulating ``Py_UNICODE*`` strings. 2211 (Contributed by Inada Naoki in :issue:`41123`.) 2212 2213 * ``Py_UNICODE_strlen``: use :c:func:`PyUnicode_GetLength` or 2214 :c:macro:`PyUnicode_GET_LENGTH` 2215 * ``Py_UNICODE_strcat``: use :c:func:`PyUnicode_CopyCharacters` or 2216 :c:func:`PyUnicode_FromFormat` 2217 * ``Py_UNICODE_strcpy``, ``Py_UNICODE_strncpy``: use 2218 :c:func:`PyUnicode_CopyCharacters` or :c:func:`PyUnicode_Substring` 2219 * ``Py_UNICODE_strcmp``: use :c:func:`PyUnicode_Compare` 2220 * ``Py_UNICODE_strncmp``: use :c:func:`PyUnicode_Tailmatch` 2221 * ``Py_UNICODE_strchr``, ``Py_UNICODE_strrchr``: use 2222 :c:func:`PyUnicode_FindChar` 2223 2224* Removed ``PyUnicode_GetMax()``. Please migrate to new (:pep:`393`) APIs. 2225 (Contributed by Inada Naoki in :issue:`41103`.) 2226 2227* Removed ``PyLong_FromUnicode()``. Please migrate to :c:func:`PyLong_FromUnicodeObject`. 2228 (Contributed by Inada Naoki in :issue:`41103`.) 2229 2230* Removed ``PyUnicode_AsUnicodeCopy()``. Please use :c:func:`PyUnicode_AsUCS4Copy` or 2231 :c:func:`PyUnicode_AsWideCharString` 2232 (Contributed by Inada Naoki in :issue:`41103`.) 2233 2234* Removed ``_Py_CheckRecursionLimit`` variable: it has been replaced by 2235 ``ceval.recursion_limit`` of the :c:type:`PyInterpreterState` structure. 2236 (Contributed by Victor Stinner in :issue:`41834`.) 2237 2238* Removed undocumented macros ``Py_ALLOW_RECURSION`` and 2239 ``Py_END_ALLOW_RECURSION`` and the ``recursion_critical`` field of the 2240 :c:type:`PyInterpreterState` structure. 2241 (Contributed by Serhiy Storchaka in :issue:`41936`.) 2242 2243* Removed the undocumented ``PyOS_InitInterrupts()`` function. Initializing 2244 Python already implicitly installs signal handlers: see 2245 :c:member:`PyConfig.install_signal_handlers`. 2246 (Contributed by Victor Stinner in :issue:`41713`.) 2247 2248* Remove the ``PyAST_Validate()`` function. It is no longer possible to build a 2249 AST object (``mod_ty`` type) with the public C API. The function was already 2250 excluded from the limited C API (:pep:`384`). 2251 (Contributed by Victor Stinner in :issue:`43244`.) 2252 2253* Remove the ``symtable.h`` header file and the undocumented functions: 2254 2255 * ``PyST_GetScope()`` 2256 * ``PySymtable_Build()`` 2257 * ``PySymtable_BuildObject()`` 2258 * ``PySymtable_Free()`` 2259 * ``Py_SymtableString()`` 2260 * ``Py_SymtableStringObject()`` 2261 2262 The ``Py_SymtableString()`` function was part the stable ABI by mistake but 2263 it could not be used, because the ``symtable.h`` header file was excluded 2264 from the limited C API. 2265 2266 Use Python :mod:`symtable` module instead. 2267 (Contributed by Victor Stinner in :issue:`43244`.) 2268 2269* Remove :c:func:`PyOS_ReadlineFunctionPointer` from the limited C API headers 2270 and from ``python3.dll``, the library that provides the stable ABI on 2271 Windows. Since the function takes a ``FILE*`` argument, its ABI stability 2272 cannot be guaranteed. 2273 (Contributed by Petr Viktorin in :issue:`43868`.) 2274 2275* Remove ``ast.h``, ``asdl.h``, and ``Python-ast.h`` header files. 2276 These functions were undocumented and excluded from the limited C API. 2277 Most names defined by these header files were not prefixed by ``Py`` and so 2278 could create names conflicts. For example, ``Python-ast.h`` defined a 2279 ``Yield`` macro which was conflict with the ``Yield`` name used by the 2280 Windows ``<winbase.h>`` header. Use the Python :mod:`ast` module instead. 2281 (Contributed by Victor Stinner in :issue:`43244`.) 2282 2283* Remove the compiler and parser functions using ``struct _mod`` type, because 2284 the public AST C API was removed: 2285 2286 * ``PyAST_Compile()`` 2287 * ``PyAST_CompileEx()`` 2288 * ``PyAST_CompileObject()`` 2289 * ``PyFuture_FromAST()`` 2290 * ``PyFuture_FromASTObject()`` 2291 * ``PyParser_ASTFromFile()`` 2292 * ``PyParser_ASTFromFileObject()`` 2293 * ``PyParser_ASTFromFilename()`` 2294 * ``PyParser_ASTFromString()`` 2295 * ``PyParser_ASTFromStringObject()`` 2296 2297 These functions were undocumented and excluded from the limited C API. 2298 (Contributed by Victor Stinner in :issue:`43244`.) 2299 2300* Remove the ``pyarena.h`` header file with functions: 2301 2302 * ``PyArena_New()`` 2303 * ``PyArena_Free()`` 2304 * ``PyArena_Malloc()`` 2305 * ``PyArena_AddPyObject()`` 2306 2307 These functions were undocumented, excluded from the limited C API, and were 2308 only used internally by the compiler. 2309 (Contributed by Victor Stinner in :issue:`43244`.) 2310 2311* The ``PyThreadState.use_tracing`` member has been removed to optimize Python. 2312 (Contributed by Mark Shannon in :issue:`43760`.) 2313 2314 2315Notable security feature in 3.10.7 2316================================== 2317 2318Converting between :class:`int` and :class:`str` in bases other than 2 2319(binary), 4, 8 (octal), 16 (hexadecimal), or 32 such as base 10 (decimal) 2320now raises a :exc:`ValueError` if the number of digits in string form is 2321above a limit to avoid potential denial of service attacks due to the 2322algorithmic complexity. This is a mitigation for `CVE-2020-10735 2323<https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10735>`_. 2324This limit can be configured or disabled by environment variable, command 2325line flag, or :mod:`sys` APIs. See the :ref:`integer string conversion 2326length limitation <int_max_str_digits>` documentation. The default limit 2327is 4300 digits in string form. 2328 2329Notable security feature in 3.10.8 2330================================== 2331 2332The deprecated :mod:`mailcap` module now refuses to inject unsafe text 2333(filenames, MIME types, parameters) into shell commands. Instead of using such 2334text, it will warn and act as if a match was not found (or for test commands, 2335as if the test failed). 2336(Contributed by Petr Viktorin in :gh:`98966`.) 2337