编程基础:异常处理
当你编写一个程序时,它往往不会像你预期的那样工作。它可能无法编译,也可能在你运行时崩溃,或者可能给你错误的结果。这些都是你代码中的错误,我们可以将它们分为 3 个不同的错误类别
- 编译错误
- 运行时错误
- 逻辑错误
让我们看看它们分别代表什么。
你可能遇到过很多这种错误,当你试图运行你的程序时,它不会编译,会给你一个错误消息。如果你使用的是类似 Visual Studio 的东西,它甚至会用蓝色波浪线来标记有问题的代码。你编写的代码的结构或语法存在问题。这可能是一种情况,你忘记添加一个闭括号,或者你拼错了关键字。看看这个例子
For x = 1 two 9
console.WriteLine(x)
Next
你应该可以看到,在第 1 行,程序员拼错了单词 to
。这段代码根本无法工作。
有时你的程序会编译得很好,但在你实际运行它时会崩溃。例如,这段代码
Dim x as integer = 0
Dim total as integer = 0
While x < 5
total = total + 1
Loop
程序员创建了一个无限循环,并且 total
的值会趋于无穷大,最终导致程序崩溃。
逻辑错误是指程序编译通过,没有崩溃,但它给出的答案是不正确的。代码传达的逻辑、语义或含义是错误的。看看下面的例子
Dim Price as decimal = 45.99
Dim Tax as decimal = 0.20
Console.Writeline("Price {{=}} " & Price)
Console.Writeline("VAT {{=}} " & Price * Tax)
Console.Writeline("Total {{=}} " & Price + Tax)
在上面的例子中,你希望它输出
增值税 = 9.198
总计 = 55.188
但由于第 6 行存在逻辑错误,它输出了
增值税 = 9.198
总计 = 46.19
为了修复它,你必须修复代码的逻辑并将第 6 行更改为
Console.Writeline("Total = " & Price + (Price * Tax))
练习:异常处理 命名并给出编程代码中三种错误类型的示例 答案
以下代码中存在什么错误,你将如何修复它 dim x as integer
do until x > 5
x = 1
x = x + 1
loop
答案 存在一个运行时错误。
以下代码中存在什么错误,你将如何修复它 dim n as sting
console.writeline("enter your name")
n = console.readline
答案 第一行存在一个编译(语法)错误。
以下代码中存在什么错误,你将如何修复它 Dim names() As String = {"Harry", "Dave", "Princess", "Nicky"}
'print all the names
For x = 1 to 3
Console.Writeline("name " & x & " = " & names(x))
Next
答案 第三行存在一个逻辑(语义)错误。
以下代码中存在什么错误,你将如何修复它 Dim names() As Sting = {"Harry", "Dave", "Princess", "Nicky"}
Dim y As Integer
y = Console.Readline()
'print some of the names
For x = 0 to y
Console.Writeline("name " & x & " = " & names(x))
Next
答案 第 1 行存在编译错误,
|
Dim age as integer
console.writeline("How old are you?")
age = console.readline()
console.writeline("What is your name?")
对于上面的代码,如果我们输入以下内容,可以很容易地使它崩溃
你几岁了?
卷心菜!
原因,正如你应该已经知道的,变量 age
是一个整数,而你试图将字符串 卷心菜 保存到一个整数中。这就像试图将大炮塞进骆驼,它们不兼容,VB 肯定会抱怨并破坏你的所有代码。我们需要的是一种方法来阻止或捕获这些错误,我们将研究一下 try and catch。
Dim age as integer
console.writeline("How old are you?")
Try
age = console.readline()
Catch ex As Exception
console.writeline(ex.message)
End Try
console.writeline("What is your name?")
这将处理这个问题
你几岁了?
苏格拉底!
从字符串 "苏格拉底!" 转换为类型 'Integer' 无效。
你叫什么名字?
让我们知道你输入的是一个字符串,而它期望的是一个整数。程序没有崩溃。
练习:异常处理 使用 try and catch 来避免用户输入的值 Dim names() As String = {"Harry", "Dave", "Princess", "Nicky"}
Dim y As Integer
y = Console.Readline()
'print some of the names
For x = 0 to y
Console.Writeline("name " & x & " = " & names(x))
Next
答案 Dim names() As String = {"Harry", "Dave", "Princess", "Nicky"}
Dim y As Integer
y = Console.Readline()
'print some of the names
Try
For x = 0 to y
Console.Writeline("name " & x & " = " & names(x))
Next
Catch ex As Exception
console.writeline("Looks like we're exceeded our array index")
console.writeline(ex.message)
End Try
|