Handle exceptions in D
Here's how to handle exceptions in D.
try {
throw new Exception("error message");
} catch (Exception error) {
writefln("Error catched: %s", error.msg);
} finally {
writefln("in finaly block");
}
catch (Exception error)
will catch all exception of type Exception
and child (inhereted) types.
Error types structure
Here is a list of standart error types in D (not complete)
- Throwable
- Error
- AssertError
- FinalizeError
- HiddenFuncError
- InvalidMemoryOperationError
- OutOfMemoryError
- RangeError
- SwitchError
- Exception
- ErrnoException
- UnicodeException
- FileException (std.file)
- ProcessException (std.process)
- RegexException (std.regex)
- DateTimeException (std.datetime)
- TimeException (core.time)
- StdioException (std.stdio)
- StringException (std.string)
- AddressException, HostException, SocketException, ... (std.socket)
- Error
Custom errors
// Define custom exception class
class ArgumentError : Exception {
this(string msg, string file = __FILE__, size_t line = __LINE__) {
super(msg, file, line);
}
}
// Throw custom class error
throw new ArgumentError("first argument array should be not empty");
// Catch custom error
try {
someFunction([]);
} catch (ArgumentError error) {
writeln("ERROR: ", error.msg);
return 1;
}
We need to add string file = __FILE__, size_t line = __LINE__
which will automatically add position where exception was thrown, without it stacktrace will show line number of super(msg)
.
More
nothrow
functions can not throw any exceptions. It's made to indicate for developers who will use your function, also for better compiled code generation.
ulong size() nothrow { return m_size; }
Read more:
Written by Pavel
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#D
Authors
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#