[TOC]
异常
- 定义:当python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的'异常'
捕获异常
- 在Python中,处理异常(也称为错误)的主要机制是使用try和except语句
基本语法
try:
可能发生错误的代码
except 异常类型:
如果捕获到该异常类型执行的代码
示例
try:
# 尝试执行的代码块
result = 10 / 0 # 这里会抛出一个ZeroDivisionError
except ZeroDivisionError:
# 如果在try块中发生了ZeroDivisionError异常,则执行这里的代码
print("除数不能为零!")
- 捕获所有类型的异常或者多个异常类型
示例
try:
# 尝试执行的代码块
result = 10 / int('a') # 这里会抛出一个ValueError
except (ValueError, ZeroDivisionError):
# 捕获ValueError或ZeroDivisionError异常
print("发生了一个错误!")
except Exception as e:
# 捕获所有其他类型的异常
print(f"发生了一个未知错误:{e}")
* Exception是所有程序异常类的父类
异常的finally
- finally子句来指定无论是否发生异常都会执行的代码
示例
try:
# 尝试执行的代码块
result = 10 / 5 # 这里不会抛出异常
except ZeroDivisionError:
print("除数不能为零!")
finally:
# 这里的代码总是会被执行
print("清理资源...")
异常的else
- else子句来编写在没有异常发生时才执行的代码
示例
try:
# 尝试执行的代码块
result = 10 / 5 # 这里不会抛出异常
except ZeroDivisionError:
print("除数不能为零!")
else:
# 如果没有异常发生,这里的代码会被执行
print(f"结果是:{result}")
finally:
# 这里的代码总是会被执行
print("清理资源...")
抛出异常
- 异常抛出,当有一些异常自己处理不了或者不想处理,需要向调用方抛出
- 手动抛出异常,需要使用raise语句,后跟异常类名或异常类的实例
抛出内置异常
- 抛出Python内置的异常类型,如ValueError,TypeError,IOError等
示例
# 如果discount大于100,就会抛出一个ValueError异常
def apply_discount(product,discount):
if discount > 100:
raise ValueError('折扣百分比不能超过100')
final_price = product.price * (1.0 - discount / 100)
return final_price
raise
- raise 是一个关键字,用于抛出(raise)一个异常(exception)。当 raise 语句被执行时,它会立即停止当前代码的执行,并将控制权传递给最近的 try-except 块或 finally 子句
- raise 可以用来抛出一个已有的异常,或者创建一个新的异常并抛出
引发自定义异常
示例
age = -10
if age < 0:
raise ValueError("年龄不能为负数")
print("Age:", age)
在try...except...块中重新引发捕获的异常
示例
def divide(a, b):
try:
result = a / b
except ZeroDivisionError as e:
print("除数不能为零!")
raise # 使用不带参数的raise重新引发异常
return result
try:
print(divide(10, 0))
except ZeroDivisionError as e:
print("捕获到异常:", e)
* 在divide函数中捕获了ZeroDivisionError异常,并在except块中使用不带参数的raise重新引发了它。这意味着异常将被传递回调用divide函数的代码,并在那里被捕获和处理。
- THE END -
最后修改:2025年8月1日
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.qian777.cn/75.html
共有 0 条评论