2023-06-30 19:54 UTC+02:00, MRAB <pyt...@mrabarnett.plus.com>:
> On 2023-06-30 14:55, Daniel Walker wrote:
>> As most of you probably know, you can use else with try blocks:
>>
>> try:
>>      do_stuff()
>> except SomeExceptionClass:
>>     handle_error()
>> else:
>>     no_error_occurred()
>>
>> Here, no_error_occurred will only be called if do_stuff() didn't raise
>> an exception.
>>
>> However, the following is invalid syntax:
>>
>> try:
>>     do_stuff()
>> else:
>>     no_error_occurred()
>>
>> Now you might say that this isn't needed as you can achieve the same
>> result with
>>
>> do_stuff()
>> no_error_occurred()
>>
>> However, what if I want to use finally as well:
>>
>> try:
>>     do_stuff()
>> else:
>>     no_error_occurred()
>> finally:
>>     cleanup()
>>
>> and I need no_error_occurred to be called before cleanup?  For my actual
>> use case, I've done
>>
>> try:
>>     do_stuff()
>> except Exception:
>>      raise
>> else:
>>     no_error_occurred()
>> finally:
>>     cleanup()
>>
>> This seems very non-Pythonic.  Is there a reason why else without except
>> has to be invalid syntax?
>>
> What would be the difference between
>
>      try:
>         do_stuff()
>      else:
>         no_error_occurred()
>      finally:
>         cleanup()
>
> and
>
>      try:
>         do_stuff()
>         no_error_occurred()
>      finally:
>         cleanup()
>
> ?
>

One could argue that it's conceptually not the same although the
actual execution is the same.

In the first case you intend to only catch the exceptions generated by
do_stuff().
In the second case, you intend to catch those generated by do_stuff()
and those generated by no_error_occurred().

If later on an "except" is added, the developper doing the
modification should be reminded to move the call to
no_error_occurred() into an "else". With real-world non-trivial code,
it might not be so simple to see.

I'm not an expert, but I actually see no downside to having an "else"
without an "except".


Best regards,
Celelibi
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/ROEHA53I2LV6PIR32ZAGAWTK6SEV5CBJ/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to