在Python中,异常(exception)是程序运行时发生错误的一种表示方式。当一个错误发生时,Python会触发一个异常对象,如果不被捕获,该异常会导致程序立即停止并显示错误信息。为了使程序能够更优雅地处理错误并继续执行,Python提供了异常捕获和抛出机制。
异常的抛出(Raise):
- 在Python中,你可以使用
raise
关键字手动触发异常。这通常用于在特定条件下强制程序抛出异常,比如验证用户输入、检测某些逻辑错误或者从自定义函数中报告特殊错误情况。
例如:
raise ValueError("Invalid value provided")
class CustomError(Exception):
pass
# 定义一个自定义异常类
raise CustomError("This is a custom error message")
异常的捕获(Handling):
- 使用
try-except
语句块来捕获可能发生的异常。当try
块中的代码发生异常时,相应的except
块会被执行,从而避免程序意外终止。
try:
# 这里放置可能出现异常的代码
age = int(input("Enter your age: "))
if age < 0:
raise ValueError("Age cannot be negative!")
# 对年龄进行某种操作...
except ValueError as ve:
# 如果ValueError异常发生(如输入非数字或年龄为负数)
print(f"An error occurred: {ve}")
except Exception as e:
# 如果发生了其他类型的异常
print(f"Unexpected error: {e}")
# 可选的else子句会在try块没有抛出异常的情况下执行
else:
print("No exceptions were raised during input.")
# finally子句无论是否发生异常都会被执行
finally:
print("This block always executes.")
在上述示例中,try
部分包含可能会产生异常的代码段。当异常发生时,Python会查找与之匹配的except
子句,若找到合适的异常类型,则执行对应的处理代码。如果没有指定异常类型,或者使用的是Exception
(所有异常的基类),则可以捕获任何类型的异常。
最后,finally
子句用来包含那些无论是否发生异常都需要执行的清理代码,如关闭文件流、释放资源等。即使在except
或else
中有return
或break
等控制流程语句,finally
块仍会被执行。