异常
当Python程序执行时遭遇到错误,解释器将无法继续往下执行,此时会出现错误提示,这便是异常。
- 例如打开一个不存在的文件
- 使用一个没有定义的变量
捕获异常
- try-except
将可能出现问题的代码,放在try中,把处理异常的代码放在except中。
try: open("www.txt",'r') except FileNotFoundError: print("--------处理异常-------") print("您打开的文件不存在") 输出: --------处理异常------- 您打开的文件不存在
当我们需要捕获多个异常时,可以将要捕获异常的名字放在一个元组中。except之后使用Exception将捕获所有异常,有时我们希望存储捕获的异常可以使用as。
try: open("www.txt",'r') print(num) except (FileNotFoundError,NameError) as exceptionInfo: print("--------处理异常-------") print("您打开的文件不存在") print("异常的基本信息:",exceptionInfo) 输出: --------处理异常------- 您打开的文件不存在 异常的基本信息: [Errno 2] No such file or directory: 'www.txt'
- else
在if中条件不满足时就会执行,for循环中不满足条件时就会执行。类似在try-except中如果没有异常将被执行else中的逻辑代码。
try: open("test.py",'r') num = 100 print(num) except (FileNotFoundError,NameError) as exceptionInfo: print("--------处理异常-------") print("您打开的文件不存在") print("异常的基本信息:",exceptionInfo) else: print("没有异常产生,可以完美使用") 输出: 100 没有异常产生,可以完美使用
- try-finally
如果使用try-finally捕获异常,那么无论异常是否产生都要执行finally部分语句。finally通常用来文件关闭,释放锁,数据库连接返还给连接池等。
def division(a,b): try: result = a/b print("return----before") return result except Exception as errorInfo: print("捕获异常信息:",errorInfo) else: print("没有异常,result=",result) finally: print("finally---让我来做最后的事情吧") division(100,20) print("--"*20) division(100,0) 输出: return----before finally---让我来做最后的事情吧 ---------------------------------------- 捕获异常信息: division by zero finally---让我来做最后的事情吧
当程序产生异常时,先执行打印异常信息,然后执行finally语句。如果程序没有异常finally会在return之后立即执行。如果注释掉return result语句,在没有错误的情况下,else执行之后,才执行finally语句。
return----before 没有异常,result= 5.0 finally---让我来做最后的事情吧 ---------------------------------------- 捕获异常信息: division by zero finally---让我来做最后的事情吧
自定义异常
首先创建一个子类去继承Error或者Exception,然后使用raise引发一个异常。
class ShortInputException(Exception): def __init__(self,length,atleast): super().__init__() self.length = length self.atleast = atleast def test(): try: s = input("请输入:") if len(s) < 3: raise ShortInputException(len(s),3) except ShortInputException as info: print("ShortInputException: 输入的长度是 %d,长度至少应是 %d"% (info.length, info.atleast)) else: print("--else--没有异常--") test() 输出: 请输入:abc --else--没有异常-- 请输入:as ShortInputException: 输入的长度是 2,长度至少应是 3