Hacker News new | past | comments | ask | show | jobs | submit login

The problem there is that 2.4's exception statements and 3.0's have two different meanings.

2.4 only supports this:

    try:
        do stuff
    except FooError, e:
        do stuff with e
3.0 and up choke on this; they interpret it as "catch exceptions of type FooError or e and do not give the exception object a name".

2.5 through 2.7 interpret like 2.4 but also support explicit parentheses to do what Python 3 does:

    try:
        do stuff
    except (FooError, BarError) as e:
        do stuff
    except (BazError, QuxError):
        do other stuff
2to3 requires that you use the new exception syntax only, to avoid confusion.



The following will work across 3 and 2 versions going back pretty far. It's necessary if you want to support pre-2.5 versions (where `as` was introduced):

    import sys
    try:
        fn()
    except (IOError, TypeError):
        err = sys.exc_info()[1]
        print(err)
http://docs.pythonsprints.com/python3_porting/py-porting.htm...


Still kind of ugly, and not something which you want to litter than Django sources. Especially if you are going to put them all back when 2.4 support is dropped.




Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: