On Tuesday, 20 January 2026 at 21:58:46 UTC, Ali Çehreli wrote:
What fails is the code inside 'main'.
> ```
> import std.stdio : writeln;
> import std.exception : enforce, assertThrown, assertNotThrown;
>
> void main()
> {
> auto result = average([], []);
>
> // assert is not caught in catch block
> // enforce is caught in catch block
> try
> {
> result = average([1], [1, 2]);
> }
> catch (Exception e)
> {
> writeln("Caught exception: ", e.msg);
> }
> }
There is the issue: The exception type that assert throws is
*not* under the Exception hierarchy but under the Error
hierarchy:
```
Throwable (not recommended to catch)
↗ ↖
Exception Error (not recommended to catch)
↗ ↖ ↗ ↖
... ... ... ...
```
You could catch Throwable or Error. However, as they are not
recommended to be caught, perhaps a better option is to change
assert() to enforce(). enforce() throws a type under the
Exception hierarchy.
Ali
That is true. I got rid of the try catch, with only the try
body, and the unittest passes.
Ali, I am still working on the D Udemy course. It will likely be
over 40 hours of tutorial video, based on your book. When
released in the Spring, it should make it easy for newbies to
master learning the D language, which is not trivial. I am
working on it Full Time.
Hopefully, this will put D language back in the "Real" language
category.
-- Brother Bill