Вопросы по теме 'contextmanager'

Как использовать менеджер контекста, чтобы избежать использования __del__ в python?
Общеизвестно, что метод Python __del__ не следует использовать для очистки важных вещей, так как не гарантируется, что этот метод будет вызван. Альтернативой является использование менеджера контекста, как описано в нескольких потоках. Но я не...
6951 просмотров
schedule 25.10.2022

Правильный способ обработки исключений в классе менеджера контекста Python2.7
У меня есть несколько менеджеров контекста для проекта, над которым я работаю. Он вот-вот будет отправлен, и я столкнулся с чем-то, из-за чего начинаю паниковать. У меня сложилось впечатление, что вы не должны повторно вызывать исключения,...
426 просмотров

Перехват исключений в __enter__ в вызывающем коде на Python
Есть ли способ перехватывать исключения в методе __enter__ контекстного менеджера, не заключая весь блок with в try ? class TstContx(object): def __enter__(self): raise Exception("I'd like to catch this exception") def...
1833 просмотров

python `с оператором .. as ..` и несколькими возвращаемыми значениями
Я пытаюсь использовать оператор python with (также известный как менеджер контекста), чтобы гарантировать, что сокет соединения TCP, созданный server_socket.accept() , всегда закрыт. Однако очевидная форма не работает, потому что accept()...
3967 просмотров

Как манипулировать исключением в __exit__ контекстного менеджера?
Я знаю, что повторно вызывать исключение из метода __exit__() контекстного менеджера — плохой стиль. Итак, я хотел бы добавить атрибут к экземпляру, который может нести контекстную информацию, которая недоступна, если я позволю исключению...
2708 просмотров
schedule 20.08.2022

Контекстный менеджер Python не очищается
Когда я вызываю какие-либо исключения внутри менеджера контекста, код очистки не запускается. Например: from contextlib import contextmanager try: raise BaseException() except BaseException: print "bye from except" @contextmanager def...
759 просмотров

как питонический способ унаследовать контекстный менеджер
Python учит нас выполнять очистку объектов с помощью __enter__ и __exit__ . Что делать, если мне нужно создать объект, который использует объекты, которые должны использовать диспетчеры контекста? Представьте себе это: from database1 import...
5093 просмотров
schedule 28.10.2022

Понимание цели возврата себя в классе менеджера контекста
Попытка понять, как диспетчеры контекста работают для перехвата ошибок, а точнее роль метода __enter__() в классе, созданном для использования в качестве диспетчера контекста, как он работает здесь в процессе «отлова ошибок» и почему self это...
646 просмотров

Почему модуль не может быть диспетчером контекста (для оператора with)?
Предположим, у нас есть следующие mod.py : def __enter__(): print("__enter__<") def __exit__(*exc): print("__exit__< {0}".format(exc)) class cls: def __enter__(self): print("cls.__enter__<") def __exit__(self,...
944 просмотров

Условные или необязательные менеджеры контекста в операторе with
Предположим, у меня есть какой-то контекстный менеджер (из сторонней библиотеки), который я использую так: with freeze_time(test_dt): lines_of_code_1 lines_of_code_2 lines_of_code_3 Но предположим, что если для test_dt нет...
1599 просмотров
schedule 13.10.2022

Список Python: использование [:]
Когда я читал главу 5 книги Python Essential Reference , я столкнулся с проблемой в примере ListTransaction . Вот исходный код: class ListTransaction(object): def __init__(self,thelist): self.thelist=thelist def...
31 просмотров
schedule 05.03.2023

Менеджеры контекста в Matlab: вызов __enter__ в Matlab
У меня есть пакет Python, и я хотел бы использовать его классы и методы в Matlab. Я знаю, что это можно сделать напрямую, начиная с Matlab 2014b. Я имею в виду, что все, что вам нужно сделать, это добавить py. в начале ваших утверждений. Пока все...
255 просмотров
schedule 26.09.2022

Как доработаны контекстные менеджеры в непотребленных генераторах?
Я не понимаю, как и когда контекстный менеджер в недоделанном генераторе закрывается. Рассмотрим следующий менеджер контекста и функцию: from contextlib import contextmanager @contextmanager def ctx(): print('enter ctx') yield...
235 просмотров
schedule 23.12.2022

Pythonic способ управления генераторами
Предлагает ли Python немного синтаксического сахара, чтобы подсластить конструкцию генератора test , как показано ниже? def acquire(): print('Acquiring resource') yield 'A' def do_stuff(): print('Doing stuff') yield 'B'...
71 просмотров
schedule 19.06.2023

Можно ли использовать подпроцесс asyncio с contextmanager?
В python (3.7+) я пытаюсь запустить подпроцесс в качестве менеджера контекста, асинхронно передавая потенциально большие объемы stdout. Проблема в том, что я не могу заставить тело contextmanager работать асинхронно с обратным вызовом stdout. Я...
347 просмотров

Может ли функция вести себя как функция *и* контекстный менеджер?
Я понимаю, как можно расширить объект, чтобы его также можно было использовать в качестве менеджера контекста. Я также понимаю, как можно легко создать диспетчер контекста из функции (генератора), используя contextlib . Однако можно ли написать...
28 просмотров
schedule 09.03.2023

Как я могу поймать исключение внутри менеджера контекста?
У меня есть случай, когда мне нужно поймать какое-то исключение ( в коде, например, я хочу поймать ZeroDivisionError ) и обработать его внутри моего собственного контекстного менеджера. Мне нужно проверить количество этого исключения и сделать...
57 просмотров
schedule 15.07.2023

Имитация пользовательского контекстного менеджера внутри функции
У меня есть собственный менеджер контекста, определенный как: # ~/db/query.py @contextmanager def get_db_connection(conn_string, **kwargs): try: conn = pyodbc.connect(conn_string, **kwargs) yield conn except Exception as...
31 просмотров