Exception handling 捕获异常,do';s和dont';s
在使用try-catch块时,将catch块留空是否总是一种糟糕的编程技术 例如,在我期望出现异常的情况下,我从一个文件中读取10个值…并将每个值转换为字符串。这10个值中有一个可能为空,但我不想在此时停止执行,而是继续执行(显然使用了try-catch)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 = _
我正在尝试的一个蹩脚的例子:
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块是否应该正常使用;这就是在特定情况下,一个空的挡块是否有意义。我还要补充一点:如果你绝对肯定要接受一个异常,至少提供一个可选的方法来记录它。这样,如果代码出现错误,您就有机会在运行时验证您是否确实接受了预期得到的异常,而不是其他异常。我还要补充一点:如果你绝对肯定要接受一个异常,至少提供一个可选的方法来记录它。这样,如果代码出现错误,您就有机会在运行时验证您是否确实接受了预期得到的异常,而不是其他异常。