【问题标题】:Catch specific exception instead of "Exception ex" [closed]捕获特定异常而不是“异常前”[关闭]
【发布时间】:2019-10-15 14:08:08
【问题描述】:

我正在向数据库中插入数据,我猜这里可能会出现某种异常,可能不止一个?

通常我曾经写过这样的东西:

try
{
 //Execution code
}
catch(Exception ex)
{
 // log error and throw it
}

我认为最好捕获一些特定的异常而不是 (Exception ex) 这样的东西:

try
{
    // my possibly bad code which inserts data to db
    var someEntity = CreateEntityFromDTO(someDTO);

    _context.SomeThing.Add(someEntity);

    await _context.SaveChangesAsync(cancellationToken);
}
catch(MySpecificException mse)
{
   // log error and throw it 
}

在向 db 插入数据时捕获异常的最佳实践是什么?

谢谢

干杯

【问题讨论】:

  • 您在这里询问什么“最佳实践”?如果您想捕获特定异常以以特定方式响应,当然鼓励您这样做。究竟是什么问题?
  • 没有最佳实践。如果在您的情况下捕获一般Exception 效果最好,那么就这样做。否则,请调整您的异常处理行为以处理更具体的异常类型。
  • 您是否想在其他地方捕获任何类型的异常?如果没有,就在那里抓住它们。不过,您可以为您的特定类型使用不同的处理程序:try { /* do stuff */ } catch (MySpecificException mse) { /* handle mse */ } catch (Exception ex) { /* handle anything else */ }。但不要更具体,除非这能解决您遇到的某些特定问题。

标签: c# exception .net-core try-catch


【解决方案1】:

您可以让您的 SpecificExceptions 继承自另一个更高级别的 DatabaseException 并在一个 catch 子句中处理所有 Database Exceptions,例如

public class DatabaseException : Exception {}
public class MySpecificException : DatabaseException {}
public class YetAnotherDBSpecificException : DatabaseException {}
try
{
   // insert data.
}
catch(DatabaseException dbEx)
{
   // A database exception occured.
   Console.Log(dbEx.Message);
}
catch(Exception other)
{
   // Non db exception occured.
   Console.Log(other.Message);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2012-11-11
    • 2016-04-29
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2014-07-09
    相关资源
    最近更新 更多