Veja como lidar com exceções em D.
try {
throw new Exception("error message");
} catch (Exception error) {
writefln("Error catched: %s", error.msg);
} finally {
writefln("in finaly block");
}
catch (Exception error)
capturará todas as exceções de tipo Exception
e tipos filho (herdados).
Estrutura de tipos de erro
Aqui está uma lista de tipos de erro padrão em D (não completa)
- Lançável
- Erro
- AssertError
- FinalizeError
- HiddenFuncError
- InvalidMemoryOperationError
- Erro de falta de memória
- RangeError
- SwitchError
- Exceção
- 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)
- Erro
Erros personalizados
// 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;
}
Precisamos adicionar string file = __FILE__, size_t line = __LINE__
que adicionará automaticamente a posição onde a exceção foi lançada, sem isso o stacktrace mostrará o número da linha de super(msg)
.
Mais
nothrow
funções não podem lançar nenhuma exceção. Destina-se a indicar desenvolvedores que utilizarão sua função, inclusive para melhor geração de código compilado.
ulong size() nothrow { return m_size; }
Consulte Mais informação: