Что нового в 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: преобразование класса данных
Оригинал