Python 'с' оператором по сравнению с 'с.. as'

Унаследованная функция Appneller Kernel :: init () сама по себе устарела, поэтому ее изменение не является жизнеспособным долгосрочным решением.

Вы можете легко переопределить сообщение об ошибке, изменив вызов на Debug :: enable (); и в app / console, и в web / app_dev.php вот так.

Измените

Debug::enable();

на

Debug::enable(E_RECOVERABLE_ERROR & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED, false);

Это оставит все другие сообщения об ошибках в такте при подавлении устаревших предупреждений. И вам вообще не нужно связываться с Ядром.

15
задан vaultah 3 September 2015 в 15:31
поделиться

3 ответа

В общих чертах, значение, присвоенное частью as оператора with , будет тем, что будет возвращено __ enter__ метод диспетчера контекста .

19
ответ дан 1 December 2019 в 00:16
поделиться

На первый взгляд это может немного сбить с толку, но

with babby() as b:
    ...

не эквивалент

b = babby()
with b:
    ...

Чтобы понять почему, вот как диспетчер контекста будет реализовано:

class babby(object):
    def __enter__(self):
        return 'frigth'

    def __exit__(self, type, value, tb):
        pass

В первом случае имя b будет привязано к тому, что возвращается из метода __ enter __ диспетчера контекста. Часто это сам диспетчер контекста (например, для файловых объектов), но это не обязательно; в данном случае это строка 'frigth' , а в вашем случае это курсор базы данных.

Во втором случае b - это сам объект диспетчера контекста.

class babby(object):
    def __enter__(self):
        return 'frigth'

    def __exit__(self, type, value, tb):
        pass

В первом случае имя b будет привязано к тому, что будет возвращено методом __ enter __ диспетчера контекста. Часто это сам диспетчер контекста (например, для файловых объектов), но это не обязательно; в данном случае это строка 'frigth' , а в вашем случае это курсор базы данных.

Во втором случае b - это сам объект диспетчера контекста.

class babby(object):
    def __enter__(self):
        return 'frigth'

    def __exit__(self, type, value, tb):
        pass

В первом случае имя b будет привязано к тому, что будет возвращено методом __ enter __ диспетчера контекста. Часто это сам диспетчер контекста (например, для файловых объектов), но это не обязательно; в данном случае это строка 'frigth' , а в вашем случае это курсор базы данных.

Во втором случае b - это сам объект диспетчера контекста.

32
ответ дан 1 December 2019 в 00:16
поделиться

Оператор with позволяет, например, убедиться, что транзакция запускается и останавливается правильно.

В случае соединений с базой данных в python, я думаю, что естественным является создание курсор в начале оператора with, а затем зафиксировать или откатить транзакцию в конце.

Два предоставленных вами блока идентичны с точки зрения оператора with. Вы также можете добавить as к первому и получить курсор.

Вам нужно проверить, как реализована поддержка with в объекте, с которым вы его используете.

См. http: // docs .python.org / whatsnew / 2.5.html # pep-343-the-with-statement

1
ответ дан 1 December 2019 в 00:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: