【发布时间】:2009-07-24 12:47:22
【问题描述】:
从 Python 到 C# 的异常处理困扰着我的一件事是,在 C# 中似乎没有任何方法可以指定 else 子句。例如,在 Python 中我可以写这样的东西(注意,这只是一个例子。我不是在问什么是读取文件的最佳方式):
try
{
reader = new StreamReader(path);
}
catch (Exception)
{
// Uh oh something went wrong with opening the file for reading
}
else
{
string line = reader.ReadLine();
char character = line[30];
}
根据我在大多数 C# 代码中看到的情况,人们只会写以下内容:
try
{
reader = new StreamReader(path);
string line = reader.ReadLine();
char character = line[30];
}
catch (Exception)
{
// Uh oh something went wrong, but where?
}
这样做的问题是,我不想捕获超出范围的异常,因为文件中的第一行可能不包含超过 30 个字符。我只想捕获与读取文件流有关的异常。我可以在 C# 中使用任何类似的构造来实现相同的目的吗?
【问题讨论】:
-
我很惊讶没有人想出带有 goto 的答案!
-
捕获一般异常绝不是一个好主意,但您可以指定捕获的异常类型。
-
我想我在最初的问题中没有说清楚,但我的意思是我不想通过捕获它们并让程序继续来掩盖 try {} 部分中的错误在路上。我希望它崩溃,以便我可以立即修复错误。同时也能够处理我无法控制的情况(即文件不存在或因为它位于网络驱动器上而无法访问它等等......)。大多数解决方案都建议捕获 IOException,但如果 StreamReader 抛出我可能没有预料到的其他类型的异常怎么办?
-
马丁,如果你没有预料到,一般来说,你应该让它过去。只处理你理解的和你能处理的。 C# 为您提供了所有工具,让您可以随心所欲地处理您想要的事情,您必须制定策略。
-
这个线程相当令人失望。没有一个答案提出了将 Python 中的 try/except/else 编写为 C# 中的 try/catch/else 的正确方法。
标签: c# exception-handling