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 抛出自定义异常,提示错误。
