If anything, a better idea would be to make "raise [... [from ...]]" an expression (possibly requiring parentheses, à la yield), thus allowing it to be put in constructs such as the one suggested, but also in lambda expressions. Of course, the value of the expression doesn't have to be specified (the assignment target stays unbound, causing a NameError if we somehow catch the exception and later refer to the assignment target).
2014-10-30 11:45 GMT-07:00 Terry Reedy firstname.lastname@example.org:
On 10/30/2014 11:13 AM, Ethan Furman wrote:
On 10/30/2014 08:03 AM, Javier Dehesa wrote:
This happens to me with some frequency:
result = f(args) if not result: # of "if result is None:" raise Exception(...)
What if I could just say?
result = f(args) or raise Exception(...)
Seems like a decent idea, but you can already have most of that:
result = f(args) or raise_exc(ValueError, 'args must be ...')
and then have 'raise_exc' do the exception raising work.
No need to pass exception class and message separately instead of an exception instance.
def raiser(exc): raise exc
print(1 or raiser(ValueError('null value'))) print(0 or raiser(ValueError('null value')))
1 Traceback (most recent call last): File "c:\programs\python34\tem.py", line 5, in <module> print(0 or raiser(ValueError('null value'))) File "c:\programs\python34\tem.py", line 2, in raiser raise exc ValueError: null value
It does add another line to the trackback, but this is pretty minor.
-- Terry Jan Reedy
Python-ideas mailing list Pythonemail@example.com https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/