
On Tue, 21 Feb 2023 at 12:44, James Addison via Python-ideas < python-ideas@python.org> wrote:
On Mon, 20 Feb 2023 at 15:03, Otomatyk dupont <otomatyk@gmail.com> wrote:
#import A_WINDOW_MODULE and import A_UNIX_MODULE if except
Here's an attempt to rephrase this slightly, with the following ideas in mind:
* Reduce parser ambiguity * Support filtering based on specific exception classes * Rephrase the code to read more closely like natural language
try import A_WINDOW_MODULE but import A_UNIX_MODULE on ImportError
If you really don't want to have the multi-line try...except, this is perfectly possible to implement as a function: # Put this is an "import_utilities" module if you want def best_import(*names): for name in names: try: return __import__(name) except ImportError: continue A_MODULE = best_import("A_WINDOW_MODULE", "A_UNIX_MODULE")
try value = int(x[2]) but value = 0 on IndexError, ValueError
This is basically "exception handling expressions", which have been discussed and rejected many times - see https://peps.python.org/pep-0463/. Personally, I have occasionally wished I could do something like this, but by the time I've thought a bit harder and found a workaround, I usually end up thinking that the workaround is *better* than a solution with an exception handling expression would have been. So although it would be convenient for quick hacks, I basically support the rejection. In the case of this specific example, you can obviously wrap the calculation and exception handling in a function. For a one-off case, that's not worthwhile, and "toy examples" typically look like one-off cases. But in real code, you'll either be doing this a lot (and so the overhead of a function for it is worthwhile) or it will be part of a function where the exception handling will be encapsulated anyway. Paul