Context Manager getting str instead of AttributeError instance

Prasad, Ramit ramit.prasad at jpmorgan.com
Thu Mar 15 15:10:59 EDT 2012


> Prasad, Ramit wrote:
> 
> > So I have a context manager used to catch errors
> >
> > def __exit__( self, exceptionClass, exception, tracebackObject ):
> >     if isinstance( exception, self.exceptionClasses ):
> >          #do something here
> >
> > Normally exception would be the exception instance, but for
> > AttributeError it seems to be a string instead.
> 
> I don't think so:
> 
> >>> class A(object):
> ...     def __enter__(self): return self
> ...     def __exit__(self, *args): print args
> ...
> >>> with A() as a:
> ...     a.x
> ...
> (<type 'exceptions.AttributeError'>, AttributeError("'A' object has no
> attribute 'x'",), <traceback object at 0x7f57b70f22d8>)
> Traceback (most recent call last):
>   File "<stdin>", line 2, in <module>
> AttributeError: 'A' object has no attribute 'x'
> 
> > 1) Why is AttributeError different than the other built-ins
> > in this respect?
> > 2) Are there other standard errors like this (I know
> > that SystemExit is different as well)?
> > 3) Taking into account that I want to include subclasses of
> > classes listed in self.exceptionClasses, Is there a better check I can
> > use?

Not sure why mine behaves differently:
Python 2.6.6 (r266:84292, Dec 17 2010, 12:36:53) [MSC v.1500 32 bit (Intel)] on win32
>>> 
>>> class A(object):
...     def __enter__(self): return self
...     def __exit__(self, *args): print args
...     
>>> with A() as a:
...     a.x
...     
(<type 'exceptions.AttributeError'>, "'A' object has no attribute 'x'", <traceback object at 0x1817F648>)
AttributeError: 'A' object has no attribute 'x'

As you can see, I am getting a string while you are not. 

Ramit


Ramit Prasad | JPMorgan Chase Investment Bank | Currencies Technology
712 Main Street | Houston, TX 77002
work phone: 713 - 216 - 5423

--

This email is confidential and subject to important disclaimers and
conditions including on offers for the purchase or sale of
securities, accuracy and completeness of information, viruses,
confidentiality, legal privilege, and legal entity disclaimers,
available at http://www.jpmorgan.com/pages/disclosures/email.  



More information about the Python-list mailing list