New submission from alanf:

There is no "from __future__ import" option that would allow Python 2x users 
the "raise... from" syntax that is provided with Python 3. This is especially 
unfortunate because even if the "raise... from" is included in a branch that is 
never executed, loading the code in 2.7 can cause a seemingly unrelated 
exception (in my case, an import error for StringIO). Since my code must work 
in 2.7, 3.3, and 3.4, this is a problem.

I have found a workaround. If I want to achieve the equivalent of "raise XXX 
from None", for instance, I can do it as follows:

    if hasattr(newExc, '__cause__'):
        newExc.__cause__ = None
    raise newExc

This works because the Exception class exists in all three Python versions, but 
only has a __cause__ attribute in Python 3. However, it's clumsier than I would 
like. Also, it's not obvious. 

I discovered that exception handling had changed when I saw that raising an 
exception when another one was active caused a "During handling of the above 
exception, another exception occurred" message on Python 3 (behavior that I 
didn't want) but was silently dropped in Python 2.7 (behavior that I did want). 
After I found a description of the "raise... from None" syntax in Python 3, I 
expected to find a "from __future__ import" statement that would handle this, 
but was disappointed. It took me a while longer to figure out the workaround 
above. I'd rather that other people didn't have to go through the process of 
figuring out the workaround.

----------
messages: 253384
nosy: alanf
priority: normal
severity: normal
status: open
title: offer "from __future__ import" option for "raise... from"
type: enhancement
versions: Python 2.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue25466>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to