Why use else in try/except construct in Python?
exception, python, try-catch
Solution
The `else` block is only executed if the code in the `try` doesn't raise an exception; if you put the code outside of the `else` block, it'd happen regardless of exceptions. Also, it happens before the `finally`, which is generally important.
This is generally useful when you have a brief setup or verification section that may error, followed by a block where you use the resources you set up in which you don't want to hide errors. You can't put the code in the `try` because errors may go to `except` clauses when you want them to propagate. You can't put it outside of the construct, because the resources definitely aren't available there, either because setup failed or because the `finally` tore everything down. Thus, you have an `else` block.
Problem
I am learning Python and have stumbled upon a concept I can't readily digest: the optional `else` block within the `try` construct. According to the documentation: The try ... except statement has an optional else clause, which, when present, must follow all except clauses. It is useful for code that must be executed if the try clause does not raise an exception. What I am confused about is why have the code that must be executed if the try clause does not raise an exception within the try construct -- why not simply have it follow the try/except at the same indentation level? I think it would simplify the options for exception handling. Or another way to ask would be what the code that is in the `else` block would do that would not be done if it were simply following the try statement, independent of it. Maybe I am missing something, do enlighten me. This question is somewhat similar to this one but I could not find there what I am looking for.