On Tuesday, 27 September 2016 at 09:30:10 UTC, Dicebot wrote:
https://github.com/dlang/DIPs/blob/master/DIPs/DIP1002.md

PR: https://github.com/dlang/DIPs/pull/43

Abstract:

In Python, the try/catch/finally syntax is augmented with an additional clause, termed else. It is a fantastically useful addition to the conventional syntax. It works like this:

```
    try:
        do_something()
    except Exception as e:
pass # Runs when an error inheriting from Exception was raised
    else:
        pass # Runs when no error was raised
    finally:
        pass # Runs unconditionally, evaluates last
```

What's annoying is that we already have finally, which can be reproduced with other language features:

{
    /*finally*/ scope (exit) {}
    try {
        do_something();
    } catch (Exception e) {}
}

but we don't (yet) have catch else, which is harder to immitate. Options are: A) the else clause is nothrow (in which case it can just go last inside the try)
or
B) store a flag and have to use immitation finally:

{
    /*finally*/ scope (exit) {}
    bool exceptionThrown = false;
    try {
        doSomething();
    } catch (Exception e) {
        exceptionThrown = true;
    }
    /*else*/ if (!exceptionThrown) {}
}

Reply via email to