Что нового в Python 3.11

Что нового в Python 3.11

22 января 2023 г.


Python 3.11 на 10-60% быстрее, чем Python 3.10         
 

PEP 654 представляет языковые функции, которые позволяют программе 

одновременно вызывать и обрабатывать несколько несвязанных исключений. 

Встроенные типы:

ExceptionGroupиBase 

ExceptionGroup 

позволяют группировать исключения и вызывать их вместе, а новый except* 

синтаксис обобщает except для соответствия подгруппам групп исключений.

 

Можно создавать подклассы групп исключений, но при этом обычно необходимо указать, как subgroup() и split()          
должны создаваться новые экземпляры для совпадающей или несовпадающей части раздела.          
BaseExceptionGroup предоставляет метод экземпляра, который вызывается всякий раз, когда необходимо создать новую группу исключений.          
Параметр представляет собой последовательность исключений для включения в новую группу.          
Поскольку имеет доступ к себе, он может копировать данные из него в новый объект.          
Например, если нам нужен подкласс группы исключений, который имеет дополнительное поле кода ошибки, мы можем сделать это: derive(self, excs)subgroupsplitexcsderive         
 

class MyExceptionGroup(ExceptionGroup):
   def __new__(cls, message, excs, errcode):
       obj = super().__new__(cls, message, excs)
       obj.errcode = errcode
       return obj
   def derive(self, excs):
       return MyExceptionGroup(self.message, excs, self.errcode)

          

PEP 678 исключения могут быть дополнены примечаниями

try: 
    raise TypeError('bad type') 
except Exception as e: 
    e.add_note('Add some information') 
	raise 



PEP 680 tomllib - Поддержка синтаксического анализа TOML в стандартной библиотеке.

import tomllib
with open("pyproject.toml", "rb") as f: 
   data = tomllib.load(f)



PEP 657: детальное определение местоположения ошибок в обратных трассировках  

Traceback (most recent call last): 
 File "distance.py", line 11, in <module> 
   print(manhattan_distance(p1, p2)) 
         ^^^^^^^^^^^^^^^^^^^^^^^^^^ 
 File "distance.py", line 6, in manhattan_distance 
   return abs(point_1.x - point_2.x) + abs(point_1.y - point_2.y) 
                          ^^^^^^^^^ 
AttributeError: 'NoneType' object has no attribute 'x'



Новая -P опция командной строки и PYTHONSAFEPATH переменная среды, чтобы отключить автоматическое добавление потенциально небезопасных путей к sys.path 
Новые возможности набора текста: 
PEP 646: вариативные дженерики 
PEP 655: пометка отдельных элементов TypedDict как обязательных или необязательных 
PEP 673: собственный тип 
PEP 675: тип произвольной строки 
PEP 681: преобразование класса данных 


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE