Lidar com exceções em D

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 Exceptione 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)

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

nothrowfunçõ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: