Python - всегда работает с __exit__ - PullRequest
0 голосов
/ 25 апреля 2020

Мне было интересно, всегда ли выполняется оператор with __exit__, как и finally. Возьмите этот код:

class WithTest(object):
    def __enter__(self):
        print("entering")
        return self

    def __exit__(self, a, b, c):
        print("exiting")

with WithTest():
    pass

Будет ли он выполняться, даже если вместо прохода вызывается exit()?

1 Ответ

0 голосов
/ 25 апреля 2020

Да __exit__ выполняется, когда вызывается exit(). Он не выйдет при вызове таких вещей, как os._exit. Этот код:

class WithTest(object):
    def __enter__(self):
        print("entering")
        return self

    def __exit__(self, a, b, c):
        print("exiting")

with WithTest():
    exit()

будет печатать:

entering
exiting
...