[Python-ideas] except expression
M.-A. Lemburg
mal at egenix.com
Mon Feb 17 16:00:28 CET 2014
More information about the Python-ideas mailing list
Mon Feb 17 16:00:28 CET 2014
- Previous message: [Python-ideas] except expression
- Next message: [Python-ideas] except expression
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 17.02.2014 15:33, Rob Cliffe wrote: > > On 17/02/2014 10:00, M.-A. Lemburg wrote: >> On 16.02.2014 05:04, Chris Angelico wrote: >> The colon in there breaks the basic Python concept of having >> colons end headers which start a new block of statements: >> >> http://docs.python.org/reference/compound_stmts.html >> >> I think it would be better to have the PEP focus on a solution >> that doesn't introduce more lambda like syntax to the language :-) >> >> Please also add examples where the expression notation is >> used as part of a larger expression, e.g. >> >> value = lst[2] except IndexError: 0, 1 >> value = lst[2] except IndexError: 0 if x else -1 >> value = lst[2] except IndexError: 0 if lst[1] except IndexError: False else -1 >> value = lst[2] except IndexError: 0 + lst[0] >> d = {'a': lst[2] except IndexError: 0, >> 'b': lst[1] except IndexError: 0 if lst[0] else 1, >> 'c': lst[0], >> } >> >> > Just wanted to point out the ambiguity in some of these, at least to a human reader. This ambiguity is the reason why I pointed at these examples :-) > If I am not mistaken, the proposed precedence for "except" (higher than "lambda", lower than > everything else including "if - else") means that: > > The first one means > value = lst[2] except IndexError: (0,1) > not > value = (lst[2] except IndexError: 0), 1 The second is what Python would do. You can use if-else for testing this: >>> 1 if 2 else 3, 4 (1, 4) > The second means > value = lst[2] except IndexError: (0 if x else -1) > not > value = (lst[2] except IndexError: 0) if x else -1 Yes. > The third means > value = lst[2] except IndexError: (0 if (lst[1] except IndexError: False) else -1) > rather than anything else (this is getting a bit mind-boggling). Yes; but I'm not entirely sure if the Python parser could even handle this case. It also fails on this example: >>> 1 if 2 if 3 else 4 else 5 File "<stdin>", line 1 1 if 2 if 3 else 4 else 5 ^ SyntaxError: invalid syntax > The fourth means > value = lst[2] except IndexError: (0 + lst[0]) > rather than > value = (lst[2] except IndexError: 0) + lst[0] Yes. > I wonder if the actual meaning coincides in all cases with your intention when you wrote them? > No offence intended, MAL, I'm not trying to slag you off, just pointing out some of the issues that > arise. :-) Looking at such issues was the intention of posting the list :-) > And wondering if there is a case for "except" having a higher precedence than "if - else". I don't > have an opinion yet, I'm just thinking aloud. > > The last one is I believe unambiguous except for the value associated with the key 'b', but to my > mind is another reason for not allowing commas in the proposed "except expression" syntax - > confusion with commas as separators between dictionary literals (sorry I keep plugging this!). > There is already ISTM a clash between comma as separator between dictionary items and between tuple > elements: > >>>> { 'a' : (1,3), 'b' : 2 } > { 'a': (1, 3), 'b': 2 } >>>> { 'a' : 1,3, 'b' : 2 } # Python 2.7.3 > SyntaxError: invalid syntax > > so I think it would be a mistake to overload the comma further. Commas are indeed too overloaded already. Guess what these evaluate to :-) x = lambda y: y, 2 x = 2, x = 1, 2, x = {1:2,} -- Marc-Andre Lemburg eGenix.com Professional Python Services directly from the Source (#1, Feb 17 2014) >>> Python Projects, Consulting and Support ... http://www.egenix.com/ >>> mxODBC.Zope/Plone.Database.Adapter ... http://zope.egenix.com/ >>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/ ________________________________________________________________________ 2014-02-12: Released mxODBC.Connect 2.0.4 ... http://egenix.com/go53 ::::: Try our mxODBC.Connect Python Database Interface for free ! :::::: eGenix.com Software, Skills and Services GmbH Pastor-Loeh-Str.48 D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg Registered at Amtsgericht Duesseldorf: HRB 46611 http://www.egenix.com/company/contact/
- Previous message: [Python-ideas] except expression
- Next message: [Python-ideas] except expression
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-ideas mailing list