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