使用try-catch块时,将catch块留空是不是一种糟糕的编程技术?
例如,在我期待异常的情况下,我正在从文件中读取10个值...并将每个值转换为字符串。 10个值中的一个可能是null,但我不想在那时停止执行而是继续(明显使用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 }
此时,当我发现异常时:
1。我不想记录这个。因为我期待一个错误的价值。
2。我不想在调用堆栈上重新抛出异常。
3。我想继续我的执行
在这种情况下,将渔获量留空是否可以接受?或者这是一个完整的NO-NO并且有更好的方法来处理这个问题吗?
我认为这可以是社区维基,因为它还涉及编程技术。
- 伊瓦尔
答案 0 :(得分:4)
我认为你的意思是
_text.ToString()
并且您担心 _text 可能 null 的情况?
在这种情况下,我不喜欢你使用例外。让自己想到需要维护此代码的人。他们看到了:
catch (Exception) { }
他们能否真正推断出所有这一切都在抓住Null案例?他们必须考虑可能抛出的其他异常。至少这会增加维护者心中的不确定性。
为什么你不能编码:
if ( _text != null ) {
String _check = _nullValue.ToString();
}
这正是你的意思。
但是进一步说,获取NULL值意味着什么?您正在读取可能包含10个值的文件。我猜可能是空行给你一个空值?
如果你得到了什么意图:
1
2
<blank line>
4
...
10
这是9个好的值和一个空行。如果你得到10个好的值和一个空行,你会怎么做? 11个好的价值观? 11个好的值和一个空行?
我的观点是,默默地忽略用户输入中的怪异往往是个坏主意。上面的一些案例很可能实际上是拼写错误。通过在某些情况下发出警告,您可能对用户非常有帮助。这意味着输入中的大多数奇数可能至少需要某种计数,如果不是实际的即时错误日志。
例如,您可能会在结尾处发出消息Your file contained 13 lines, two lines were blank. We processed 10 valid values and ignored one.
出于调试目的,你可能在错误路径中有跟踪语句。
总结:完全忽略异常很少是正确的事情。
答案 1 :(得分:0)
如果预计它并不是特别的。这是例外的好用吗?在尝试执行操作之前测试空值可能更合适。
if(_text != null)
// do something
答案 2 :(得分:0)
我最喜欢的论点是代码将变得高度无法维护。我的目标是让我的代码尽可能易于理解。
根据上面的建议,我有一支三元运营商(我个人最喜欢的大块if-else块)。
代码肯定看起来更好!我认为除非try-catch有详细记录,否则我自己也没有理由再找出空的catch语句了。
谢谢你!
-Ivar