cython-devel
changeset 3128:6834b6f640ae
Python 3 except clauses (ticket #519)
| author | Lisandro Dalcin <dalcinl@gmail.com> |
|---|---|
| date | Sat Mar 13 19:39:43 2010 -0300 (4 months ago) |
| parents | 0ffb50f63273 |
| children | 2de0798d3a95 |
| files | Cython/Compiler/Parsing.py tests/compile/tryexcept.pyx tests/run/moduletryexcept.pyx |
line diff
1.1 --- a/Cython/Compiler/Parsing.py Sat Mar 13 20:23:06 2010 +0100
1.2 +++ b/Cython/Compiler/Parsing.py Sat Mar 13 19:39:43 2010 -0300
1.3 @@ -1334,6 +1334,14 @@
1.4 if s.sy == ',':
1.5 s.next()
1.6 exc_value = p_simple_expr(s)
1.7 + elif s.sy == 'IDENT' and s.systring == 'as':
1.8 + ## XXX In Python 3, it should be:
1.9 + ## s.next()
1.10 + ## pos2 = s.position()
1.11 + ## name = p_ident(s)
1.12 + ## exc_value = ExprNodes.NameNode(pos2, name = name)
1.13 + s.next()
1.14 + exc_value = p_simple_expr(s)
1.15 body = p_suite(s)
1.16 return Nodes.ExceptClauseNode(pos,
1.17 pattern = exc_type, target = exc_value, body = body)
2.1 --- a/tests/compile/tryexcept.pyx Sat Mar 13 20:23:06 2010 +0100
2.2 +++ b/tests/compile/tryexcept.pyx Sat Mar 13 19:39:43 2010 -0300
2.3 @@ -43,3 +43,44 @@
2.4 i = 1
2.5 except:
2.6 raise
2.7 +
2.8 +def g(a, b, c, x):
2.9 + cdef int i
2.10 + a = b + c
2.11 +
2.12 + try:
2.13 + i = 1
2.14 + raise x
2.15 + i = 2
2.16 + except a:
2.17 + i = 3
2.18 +
2.19 + try:
2.20 + i = 1
2.21 + except a:
2.22 + i = 2
2.23 + except b:
2.24 + i = 3
2.25 +
2.26 + try:
2.27 + i = 1
2.28 + except a as b:
2.29 + i = 2
2.30 +
2.31 + try:
2.32 + i = 1
2.33 + except a:
2.34 + i = 2
2.35 + except:
2.36 + i = 3
2.37 +
2.38 + try:
2.39 + i = 1
2.40 + except (a, b) as c[42]:
2.41 + i = 2
2.42 + except (b, a) as c.x:
2.43 + i = 3
2.44 + except:
2.45 + i = 4
2.46 + else:
2.47 + i = 5
3.1 --- a/tests/run/moduletryexcept.pyx Sat Mar 13 20:23:06 2010 +0100
3.2 +++ b/tests/run/moduletryexcept.pyx Sat Mar 13 19:39:43 2010 -0300
3.3 @@ -1,6 +1,18 @@
3.4 __doc__ = u"""
3.5 >>> a
3.6 2
3.7 +>>> b
3.8 +3
3.9 +>>> exc[0].__class__.__name__
3.10 +'AttributeError'
3.11 +>>> exc[1].__class__.__name__
3.12 +'KeyError'
3.13 +>>> exc[2].__class__.__name__
3.14 +'IndexError'
3.15 +>>> exc[3].__class__.__name__
3.16 +'ValueError'
3.17 +>>> exc[3] is val
3.18 +True
3.19 """
3.20
3.21 a = 0
3.22 @@ -13,3 +25,71 @@
3.23 a = 2
3.24 except:
3.25 a = 3
3.26 +
3.27 +b = 0
3.28 +
3.29 +try:
3.30 + raise IndexError
3.31 +except AttributeError:
3.32 + b = 1
3.33 +except KeyError:
3.34 + b = 2
3.35 +except:
3.36 + b = 3
3.37 +
3.38 +exc = [None]*4
3.39 +
3.40 +try:
3.41 + raise AttributeError
3.42 +except AttributeError as e:
3.43 + exc[0] = e
3.44 +except KeyError as e:
3.45 + exc[0] = e
3.46 +except IndexError as e:
3.47 + exc[0] = e
3.48 +except:
3.49 + exc[0] = e
3.50 +
3.51 +try:
3.52 + raise KeyError
3.53 +except AttributeError as e:
3.54 + exc[1] = e
3.55 +except KeyError as e:
3.56 + exc[1] = e
3.57 +except IndexError as e:
3.58 + exc[1] = e
3.59 +except:
3.60 + exc[1] = e
3.61 +
3.62 +try:
3.63 + raise IndexError
3.64 +except AttributeError as e:
3.65 + exc[2] = e
3.66 +except KeyError as e:
3.67 + exc[2] = e
3.68 +except IndexError as e:
3.69 + exc[2] = e
3.70 +except:
3.71 + exc[2] = e
3.72 +
3.73 +val = None
3.74 +try:
3.75 + try:
3.76 + try:
3.77 + raise ValueError
3.78 + except AttributeError as e:
3.79 + exc[3] = e
3.80 + except KeyError as e:
3.81 + exc[3] = e
3.82 + except IndexError as e:
3.83 + exc[3] = e
3.84 + except:
3.85 + raise
3.86 + except (AttributeError,
3.87 + KeyError,
3.88 + IndexError,
3.89 + ValueError) as e:
3.90 + val = e
3.91 + raise e
3.92 +except Exception as e:
3.93 + exc[3] = e
