我有一个运行一个大循环的应用程序,它可以一次性读取数据,写入PDF并通过电子邮件发送文件。有时,会出现错误,我必须回溯到导致错误的原因。基本上整个循环都在Try / Catch块中。有两个循环,基本上(伪代码):
try
// Loop 1
process 1
// Loop 2
process 2
catch
// Message box error
有没有办法可以继续循环并跳过错误?也许保存一个例外的日志,以便我以后可以保存?
答案 0 :(得分:5)
在循环中使用另一个try ... catch
,
try
foreach () // Loop one
try
foreach () // Loop two
catch
// Log error, or ignore, then it continues loop 1
catch
// Message box error
您可以根据需要嵌套尽可能多的try ... catch
构造;但是,这会很快增加程序的复杂性,因此请谨慎使用;并且在可能的情况下,将代码块隔离到函数/方法,每个代码块都是自己的,需要的恢复过程。
答案 1 :(得分:4)
不要将try..catch
用作for之外的万能药。
将其从那里移除并将其放在那些你知道可能会造成麻烦的单一指令周围。
越紧越好。 然后,您将能够处理该情况,而不会超出整个循环或过程:
for(...)
{
// procedural code
try {
// least possible problem code
} catch(Exception ex) {
// log/report error 1
// use continue/break to continue with next cycle or break out of the loop
Log.Message("Exception (in big loop #01): " + ex.Message);
}
// procedural code
try {
// least possible problem code
} catch(Exception ex) {
// log/report error 2
// use continue/break to continue with next cycle or break out of the loop
Log.Message("Exception (in big loop #02):" + ex.Message);
}
// procedural code
}
通过这种方式,您还可以区分发生异常的位置。
要记录异常,您必须以这种方式实现Log
类:
using System.IO;
public class Log
{
public static void Message(string message)
{
using (StreamWriter writer = File.AppendText("path_to_dir\\log.txt"))
{
writer.WriteLine(message);
}
}
}
这个Log
类非常基础,可以通过以下方式进行改进:
我在这里放的只是为了让您了解记录错误。这是一个相当广泛的专业领域。
答案 2 :(得分:2)
也许是这样的?
// Loop 1
try
process 1
// Loop 2
process 2
catch
// Message box error
这取决于你想要什么。你想忽略哪些错误,那些错误源于PROCESS ONE,PROCESS TWO或者两者兼而有之?上面的伪代码将忽略所有错误并继续外部循环1。