Exception handling 捕获异常,do';s和dont';s

Exception handling 捕获异常,do';s和dont';s,exception-handling,Exception Handling,在使用try-catch块时,将catch块留空是否总是一种糟糕的编程技术 例如,在我期望出现异常的情况下,我从一个文件中读取10个值…并将每个值转换为字符串。这10个值中有一个可能为空,但我不想在此时停止执行,而是继续执行(显然使用了try-catch) 我正在尝试的一个蹩脚的例子: String _text = textReader.ReadLine(); //Assuming this RETURNS a NULL value try { String _check = _

在使用try-catch块时,将catch块留空是否总是一种糟糕的编程技术

例如,在我期望出现异常的情况下,我从一个文件中读取10个值…并将每个值转换为字符串。这10个值中有一个可能为空,但我不想在此时停止执行,而是继续执行(显然使用了try-catch)

我正在尝试的一个蹩脚的例子:

String _text = textReader.ReadLine(); //Assuming this RETURNS a NULL value
try {  
      String _check = _text.ToString(); 
      //Do something with _check, but it should not be NULL
    }
catch (Exception) 
    { //Do Nothing }
此时,当我捕获到异常时:
一,。我不想记录这个。因为我期待一个错误的值。
二,。我不想将异常重新抛出调用堆栈。
三,。我只想继续执行死刑
在这种情况下,是否可以将捕获物留空?或者这是一个完全不允许的问题,有更好的方法来处理吗

我认为这可能是一个社区wiki,因为它还涉及编程技术。

-Ivar

如果是预期的,则并非真正例外。这是异常的一个好用法吗?在尝试操作之前,测试空值可能更合适

if(_text != null)
    // do something

如果这是意料之中的,那也不是特别的。这是异常的一个好用法吗?在尝试操作之前,测试空值可能更合适

if(_text != null)
    // do something

我想你是说

 _text.ToString()
你担心什么时候文本可能是空的

我不喜欢你在这种情况下使用例外。把自己放在需要维护此代码的人的头脑中。他们看到:

catch (Exception) {  }
他们真的能推断出这一切都是为了捕捉空案例吗?他们必须考虑其他什么例外。至少这在维护者的头脑中增加了不确定性

为什么不能编写代码:

 if ( _text != null ) {
      String _check = _nullValue.ToString();
 }
这正是你的意思

但更进一步,得到NULL值意味着什么?您正在读取一个可能包含10个值的文件。我猜也许空行给你一个空值

如果您得到以下信息,您打算做什么:

 1
 2
 <blank line>
 4
 ...
 10  
至少出于调试目的,在错误路径中可能有跟踪语句


小结:完全忽略异常很少是正确的做法。

我想你的意思是

 _text.ToString()
你担心什么时候文本可能是空的

我不喜欢你在这种情况下使用例外。把自己放在需要维护此代码的人的头脑中。他们看到:

catch (Exception) {  }
他们真的能推断出这一切都是为了捕捉空案例吗?他们必须考虑其他什么例外。至少这在维护者的头脑中增加了不确定性

为什么不能编写代码:

 if ( _text != null ) {
      String _check = _nullValue.ToString();
 }
这正是你的意思

但更进一步,得到NULL值意味着什么?您正在读取一个可能包含10个值的文件。我猜也许空行给你一个空值

如果您得到以下信息,您打算做什么:

 1
 2
 <blank line>
 4
 ...
 10  
至少出于调试目的,在错误路径中可能有跟踪语句


小结:完全忽略异常很少是正确的做法。

我喜欢的最佳论据是代码将变得高度不可维护。我的目标是使我的代码尽可能容易理解。 根据上面的建议,我已经有了一大批三元运算符(我个人最喜欢的是大if-else块)
而且代码看起来确实更好!我认为,除非try-catch有很好的文档记录,否则我自己就看不出有什么理由再使用空catch语句了。

谢谢大家!!

-Ivar

我最喜欢的论点是代码将变得高度不可维护。我的目标是使我的代码尽可能容易理解。 根据上面的建议,我已经有了一大批三元运算符(我个人最喜欢的是大if-else块)
而且代码看起来确实更好!我认为,除非try-catch有很好的文档记录,否则我自己就看不出有什么理由再使用空catch语句了。

谢谢大家!!

-伊瓦尔

可能重复:@Konrad:我不这么认为。您列出的一个可能的重复项是try/catch块是否应该正常使用;这就是在特定情况下,一个空的catch块是否有意义。可能的重复:@Konrad:我不这么认为。您列出的一个可能的重复项是try/catch块是否应该正常使用;这就是在特定情况下,一个空的挡块是否有意义。我还要补充一点:如果你绝对肯定要接受一个异常,至少提供一个可选的方法来记录它。这样,如果代码出现错误,您就有机会在运行时验证您是否确实接受了预期得到的异常,而不是其他异常。我还要补充一点:如果你绝对肯定要接受一个异常,至少提供一个可选的方法来记录它。这样,如果代码出现错误,您就有机会在运行时验证您是否确实接受了预期得到的异常,而不是其他异常。