Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 18, 2011 15:19:57

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

недопонимаю With statement

читаю документацию:

If BLOCK raises an exception, the __exit__(type, value, traceback)() is called with the exception details
from __future__ import with_statement
class a(object):
def __enter__( self ):
return {"test":"OK"}
def __exit__( self, arg1, arg2, arg3 ):
print arg1, arg2, arg3
b = a()
with b:
1/0
и возникает обычный exception:
<type ‘exceptions.ZeroDivisionError’> integer division or modulo by zero <traceback object at 0x009EE058>
Traceback (most recent call last):
File “python.py”, line 10, in <module>
1/0
ZeroDivisionError: integer division or modulo by zero
Если делать
with b:
pass
то __exit__ вызывается с параметрами None, None, None

О каких исключениях идёт речь?



Офлайн

#2 Окт. 18, 2011 16:17:58

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

недопонимаю With statement

axe
и возникает обычный exception:
А вы какой ожидали?
Вот ваш __exit__ напечатал:
<type 'exceptions.ZeroDivisionError'> integer division or modulo by zero <traceback object at 0x009EE058>



Офлайн

#3 Окт. 18, 2011 16:23:37

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

недопонимаю With statement

понял, спасибо!
я ожидал, что Exception не возникнет



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version