python中处理异常
异常处理
语法错误¶
语法错误又称解析错误,可能是你在学习Python 时最容易遇到的错误:
异常
程序语法没有问题,只有在运行的时候出现问题,称为程序异常。
def add(x,y):
return x+y
z = add("hello",2) # 字符串和数字不能直接使用 + 拼接,所以说执行的时候会报异常。
with open('/hellowolrd',mode='r',encoding='utf8') as f:
print(f.readlines())
程序发生异常之后,会自动中断执行,不再运行下面的代码。
处理异常
try:
执行代码
excpet 异常类型:
处理代码
try: # 要执行的代码 with open('/hellowolrd',mode='r',encoding='utf8') as f: print(f.readlines()) # 如果程序出现文件找到不到异常 except FileNotFoundError: # 处理代码 print("对不起,文件找不到。请重新检查文件路径")
针对同一个程序可以添加多个异常处理。如果异常信息处理不到,可以添加 except Exception 匹配所有异常。
Exception:所有异常的基类
try: # 要执行的代码 with open('./data.png',mode='r',encoding='utf8') as f: print(f.readlines()) # 如果程序出现文件找到不到异常 except FileNotFoundError: # 处理代码 print("对不起,文件找不到。请重新检查文件路径") except UnicodeDecodeError: print("对不起,文件编码有误。请将文件编码改为UTF8编码") except PermissionError: print("对不起,文件权限不足,请联系管理员") # Excpetion 包括所有的异常 except Exception: print("出现未知异常信息")
注:执行的时候从上往下执行,当匹配到第一个异常时,其他的就都不执行了,当第一个匹配不到时,匹配第二个异常,当都匹配不到时,就执行最后一个
注:要在函数内部进行异常处理,不能把整个函数放到异常里,这样写是错误的
正确的写法如下,要在函数内部进行异常处理
def add(x,y): try: return x+y except TypeError: print('输入的数据类型有误,请检查数据类型') except Exception: print("未知异常") add(1,"q")
try: code except error: code ... finally: code
Finally:无论是否有异常,该语句都会执行
def add(x,y): try: return x+y except TypeError: print('输入的数据类型有误,请检查数据类型') except Exception: print("未知异常") # 不管有没有异常信息,都要执行的语句。 finally: print("haha... 执行结束") add(1,"q") add(1,1)