如果外部命令的输出是无意义的话,抛出的最好例外?

时间:2009-09-01 20:52:37

标签: .net linux exception-handling ssh

我正在开发一个C#实用程序类,它通过SSH在Linux服务器上运行外部命令(我正在使用SharpSSH;到目前为止我喜欢它并且我推荐它)并返回一些有意义的信息在命令的输出上。

上述输出中的某个地方是一个永远不应超出某个范围的整数,但我想防止这种不太可能的可能性。抛出更合适的例外是收到的数字实际上在范围之外?我在想ArgumentOutOfRangeException,但这不是一个真正的争论。自动填充不会给我任何好的候选人。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

抛出的异常类型只与两个原因相关:

  1. 您(或您的消费者)打算在某些情况下捕获异常,并以某种方式在catch()块中以编程方式响应它。
  2. 当特定问题发生时,您希望呼叫者更加清晰 - 即使它无法以编程方式响应。
  3. 所以,回答你的问题,

    1. 如果您认为此代码的使用者可能想捕获该特定异常,并以某种方式处理它,请创建一个继承自Exception的自定义异常,并提供必要的详细信息。
    2. 如果您认为处理或回复此异常不会有用,请考虑ApplicationException或可能InvalidOperationException以了解您所描述的错误类型。

答案 1 :(得分:1)

我建议InvalidOperationException。如果该值可能进入可能使用的范围(比如将来),则另一个选项是NotSupportedException

最终我建议:

namespace YourProtocol
{
    public class UnexpectedProtocolValueException : Exception
    {

答案 2 :(得分:1)

您可以在Mike Vallotton的博客上找到complete list of .NET Exceptions - 这可以帮助您做出决定。如果做不到这一点,你可以随时create your own custom Exception class