vb.net提供两种方法处理错误
1、非结构化的异常处理,这也是早期的vb中使用的异常处理方法
On Error Goto 标签 发生错误时,跳转到标签位置
On Error Resume Next 发生错误时,忽略错误,继续执行错误后面的语句
1、非结构化的异常处理,这也是早期的vb中使用的异常处理方法
On Error Goto 标签 发生错误时,跳转到标签位置
On Error Resume Next 发生错误时,忽略错误,继续执行错误后面的语句
出现错误后,就可以调用ErrObject类,来获得具体的信息。
Description 某个错误关联的描述性字符串
Number 返回或设置一个指定错误的数值
但我猜测为了衔接之前的vb,在程序中可以直接用Err。
Description 某个错误关联的描述性字符串
Number 返回或设置一个指定错误的数值
但我猜测为了衔接之前的vb,在程序中可以直接用Err。
下面的例子:
Sub main() Dim a As Byte Dim b As Byte Dim c As Byte Dim stra As String Dim strb As String On Error GoTo errcode Console.WriteLine("请输入数字:") stra = Console.ReadLine() a = Byte.Parse(stra) Console.WriteLine("请输入数字:") strb = Console.ReadLine() b = Byte.Parse(strb) c = a + b Console.WriteLine("a+b={0}",c.ToString) Console.ReadKey() Exit Sub errcode: Console.WriteLine("错误的输入{0}",Err.Description) Console.ReadKey() End Sub
2、结构化的异常处理语句:
Try……Catch
Try……Catch
我们来看下面的例子:
Sub main() Dim a As Byte Dim b As Byte Dim c As Byte Dim stra As String Dim strb As String Try Console.WriteLine("请输入数字:") stra = Console.ReadLine() a = Byte.Parse(stra) Console.WriteLine("请输入数字:") strb = Console.ReadLine() b = Byte.Parse(strb) c = a + b Console.WriteLine("a+b={0}",c.ToString) Catch ex As Exception Console.WriteLine("错误的输入") End Try Console.ReadKey() End Sub
运行时如下:
输入的数值超出了byte范围,所以返回错误。
另外一种异常处理的语句格式
下面的代码:
Sub main() Dim a As Byte Dim b As Byte Dim c As Byte Dim stra As String Dim strb As String Try Console.WriteLine("请输入数字:") stra = Console.ReadLine() a = Byte.Parse(stra) Console.WriteLine("请输入数字:") strb = Console.ReadLine() b = Byte.Parse(strb) c = a + b Console.WriteLine("a+b={0}",c.ToString) Catch ex As Exception Console.WriteLine("错误的输入") Finally Console.WriteLine("必须经过此步骤") End Try Console.ReadKey() End Sub
不管出没有出错,都会输出 “必须经过此步骤”。
在Try……Catch语句中还可以使用 Exit Try ,跳出Try语句,当然,跳出后还是要执行Finally中的语句块
Sub main() Dim a As Single Dim b As Single Dim stra As Byte Dim strb As Byte Dim flagErr As Boolean = False Do Try Console.WriteLine("请输入被除数:") stra = Console.ReadLine() a = Byte.Parse(stra) Console.WriteLine("请输入除数:") strb = Console.ReadLine() b = Byte.Parse(strb) Dim c As Byte c = a + b Console.WriteLine("a+b={0}",c.ToString) flagErr = False Catch ex As OverflowException Console.WriteLine("发生溢出" & ex.Message) flagErr = True Catch ex As InvalidCastException Console.WriteLine("转换失败" & ex.Message) flagErr = True Catch ex As Exception Console.WriteLine("错误的输入") flagErr = True End Try Loop Until flagErr = False Console.ReadKey() End Sub
运行时如下:
具体有哪些错误,请参阅msdn,Exception 类。
另外,Try……Catch语句可以嵌套使用,比如
由于.net平台下C#和vb.NET很相似,本文也可以为C#爱好者提供参考。
学习更多vb.net知识,请参看 vb.net 教程 目录