После успешного __enter__ присваивание результата в as завершается ошибкой: будет ли вызван __exit__?
База Hintsage
Программирование Python
Язык Python и его модель данных.
Темы раздела
Выберите подраздел
- 0 вопросов
Общие вопросы
Смешанные вопросы по Python.
Открыть раздел - 50 вопросов
Python Core
Типы, области видимости, функции, модули и базовая семантика.
Открыть раздел - 50 вопросов
Модель данных
Протоколы объектов, dunder-методы, дескрипторы и классы.
Открыть раздел - 48 вопросов
Коллекции и итераторы
Коллекции, comprehensions, iterators и generators.
Открыть раздел - 50 вопросов
Функции и декораторы
Замыкания, decorators, callable-объекты и управление контекстом.
Открыть раздел - 50 вопросов
Конкурентность и asyncio
Threads, processes, GIL, coroutines и asyncio.
Открыть раздел - 50 вопросов
Память и производительность
Управление памятью, профилирование и оптимизация Python.
Открыть раздел - 50 вопросов
Тестирование
pytest, fixtures, mocks и организация тестов.
Открыть раздел
Практика
Вопросы: Программирование Python
Вызываемый объект хранится атрибутом класса и реализует __get__: почему обращение к нему через экземпляр может автоматически добавить экземпляр в вызов?
Сколько раз генераторный контекстный менеджер должен передать управление через yield за один вход в with?
При декорировании функции с именованными аргументами обёртка принимает только позиционные аргументы: какое изменение контракта получает декорированная функция?
Какой объект в итоге связывается с именем класса после применения декоратора класса?
В фабрике замыканий две внутренние функции изменяют одну переменную: почему вызов одной может изменить результат другой?
Разберите последствие: что нарушит декоратор, если он перехватывает BaseException вместо Exception и возвращает запасное значение?
В чём подвох декоратора, который пытается поймать исключение генераторной функции вокруг её вызова?
Что проверяет callable(obj) и гарантирует ли значение True успешный вызов объекта?
Как декоратор, возвращающий дескриптор, узнаёт имя атрибута, под которым он установлен в классе?
Разберите механизм: почему рекурсивная функция после декорирования обычно проходит через обёртку на каждом рекурсивном вызове?
Что изменится, если декоратор применить к classmethod снаружи, а не к исходной функции внутри?
Как изменится поведение async-функции, если её обернуть обычным синхронным декоратором?
Если функция-обёртка декоратора содержит yield, что фактически произойдёт при вызове декорированной функции?
В следующем контекстном менеджере ошибка возникает и в теле блока, и при выходе. Какое исключение в итоге покинет with?
class Resource:
def __enter__(self):
return self
def __exit__(self, exc_type, exc, tb):
if exc_type is not None:
raise ValueError("cleanup failed")
return False
with Resource():
raise KeyError("body failed")
К чему приведёт объявление фабрики декоратора как async-функции вместо обычной функции?
Какую роль играет метод _recreate_cm в ContextDecorator при повторных вызовах декорированной функции?
Когда для частичного связывания аргументов предпочтительнее использовать functools.partial, а не замыкание?
Разберите, почему обычный контекстный менеджер нельзя напрямую использовать в асинхронном блоке.
Найдите причину вывода класс вместо экземпляр при входе в контекст:
class Resource:
def __enter__(self):
print("класс")
return self
def __exit__(self, exc_type, exc, tb):
return False
r = Resource()
r.__enter__ = lambda: print("экземпляр")
with r:
pass
Показано 161–180 из 348