[Python-Dev] PEP 409 and the stdlib (original) (raw)

Ethan Furman ethan at stoneleaf.us
Mon May 20 16:12:07 CEST 2013


On 05/20/2013 06:47 AM, Nick Coghlan wrote:

On 20 May 2013 23:38, Ethan Furman wrote:

As a quick reminder, PEP 409 allows this: try: ... except AnError: raise SomeOtherError from None so that if the exception is not caught, we get the traditional single exception traceback, instead of the new: During handling of the above exception, another exception occurred

My question: How do we go about putting this in the stdlib? Is this one of the occasions where we don't do it unless we're modifying a module already for some other reason? For that matter, should we? Pros: Makes tracebacks much less confusing, especially coming from a library Cons: Could hide bugs unrelated to what is being caught and transformed Be pretty conservative with this one - we should only use it when we're confident we know the original exception is almost certain to be irrelevant noise. Ensuring the traceback module makes it easy to display both would also be a good preliminary step.

As a case in point, base64.py is currently getting a bug fix, and also contains this code:

def b32decode(s, casefold=False, map01=None): . . . for i in range(0, len(s), 8): quanta = s[i: i + 8] acc = 0 try: for c in quanta: acc = (acc << 5) + b32rev[c] except KeyError: raise binascii.Error('Non-base32 digit found') . . . else: raise binascii.Error('Incorrect padding')

Does the KeyError qualify as irrelevant noise?

If we're not going to suppress the originating error I think we should at least change the double trace back message as it implies two failures, instead of just one.

-- Ethan



More information about the Python-Dev mailing list