Python 异常处理试卷
Python 异常处理试卷
选择题(每题 2 分)
-
以下哪个语句会导致
ZeroDivisionError
异常?A- A.
x = 1 / 0
- B.
x = 'string' + 1
- C.
x = '10' - 2
- D.
x = [][1]
- A.
-
在 Python 中,
try
块中的代码抛出异常时,哪个部分将会被执行?AC- A.
finally
- B.
else
- C.
except
- D. 所有的
- A.
-
下面的代码会抛出什么异常?A
try:x = int('hello') except ValueError:print("ValueError handled") except TypeError:print("TypeError handled")
- A.
ValueError
- B.
TypeError
- C.
SyntaxError
- D. 程序无异常
- A.
-
在以下代码中,
finally
块的作用是什么?Ctry:x = 1 / 0 except ZeroDivisionError:print("Cannot divide by zero.") finally:print("This will always run.")
- A. 只有在
try
中没有异常时才会执行 - B. 只有
except
处理了异常时才会执行 - C.
finally
块会在异常发生与否时都执行 - D. 只有在
try
块执行时没有异常时才会执行
- A. 只有在
-
try
/except
语句中,else
块的作用是什么?A- A. 当没有发生异常时执行
- B. 无论是否发生异常都执行
- C. 总是在
try
块抛出异常后执行 - D. 只有当
except
捕获了异常时执行
填空题(每题 2 分)
-
Python 中用于捕获异常的关键字是:_except_____。
-
在 Python 中,
finally
块中的代码会在 __异常/不异常_ 发生后执行。 -
ValueError
是一种 __内置__ 异常。 -
通过
raise
语句可以手动抛出 __自定义__ 异常。 -
处理异常时,
except
块的顺序是 _自上而下_(正确顺序)。
编程题(每题 5 分)
-
编写一个函数
divide(a, b)
,该函数接受两个参数并返回它们的商。如果参数b
为 0,应该抛出ZeroDivisionError
,并给出自定义的错误消息。def divide(a, b):try:return a / bexcept ZeroDivisionError:print("Error: Division by zero is not allowed.")
-
编写一个函数
read_file(file_name)
,该函数打开一个文件并返回其内容。如果文件不存在,应该捕获FileNotFoundError
异常并输出错误消息“文件未找到”。如果文件为空,则输出“文件为空”。def read_file(file_name):try:with open(file_name, 'r') as f:content = f.read()if content == '':print("文件为空")else:print(content)except FileNotFoundError:print("文件未找到")
-
编写一个函数
validate_age(age)
,该函数接受一个整数age
,如果age
不是整数或小于 0,则抛出一个自定义的InvalidAgeError
异常。class InvalidAgeError(Exception):passdef validate_age(age):if not isinstance(age, int):raise InvalidAgeError("年龄必须是一个整数")if age < 0:raise InvalidAgeError("年龄不能为负数")
-
编写一个程序,模拟一个银行账户。创建一个类
BankAccount
,该类包含一个deposit(amount)
方法,用于存款。如果存款金额为负数,应该抛出ValueError
并给出错误提示“存款金额必须是正数”。class BankAccount:def __init__(self):self.balance = 0def deposit(self, amount):if amount <= 0:raise ValueError("存款金额必须是正数")self.balance += amountprint(f"存款成功,当前余额: {self.balance}")
简答题(每题 4 分)
1.简述 Python 中异常处理机制的基本流程。
程序首先进入 try
块执行代码。如果没有异常,程序继续执行。如果发生异常,控制权跳转到匹配的 except
块。如果异常被捕获并处理,程序继续执行。如果没有捕获到异常,则会抛出未处理的异常。可选的 else
块在 try
块没有异常时执行,finally
块无论是否发生异常都会执行。
2.解释 try
、except
、else
和 finally
的作用,并给出示例。
try
:用于包含可能引发异常的代码。
except
:用于捕获并处理异常。
else
:当没有异常发生时执行的代码块。
finally
:无论是否发生异常都会执行的代码块,通常用于清理资源。
3.什么情况下应该使用 raise
语句抛出自定义异常?请举例说明。
当你需要在程序中传递特定类型的错误信息,或希望对某些不合要求的输入或状态进行明确的异常处理时,使用 raise
语句。例如,验证用户输入的年龄时,如果输入无效,可以使用 raise
抛出自定义异常,提示错误。