目录
异常机制
1.如果没有良好的异常机制,需要开发者花费大量精力
2.异常机制用来解决可能会出现异常的代码
3.异常指程序运行 过程中出现的非正常现象
4.异常处理 指 程序出现异常问题依然可以正确执行剩余程序,不会因为异常而终止程序执行
5. python 中 异常 也是对象 异常类BaseException
try ...一个 except 结构
有异常:跳过 异常后 except以前的代码
无异常:跳过except后语句
处理完异常继续往下执行代码
try:
print("step1")
a=1/0
print("step2")
except:
print("异常")
print("step3")
while True:
try:
x=int(input("输入数字"))
print("输入数字是:",x)
if x==88:
print("退出")
break
except BaseException as e:
print(e)
print("异常,输入的不是数字")
print("循环程序结束")
try ...多个 except 结构
注意多个异常的顺序,父类放在子类后面
try:
a=input("输入被除数")
b=input("输入除数")
c=float(a)/float(b)
print(c)
except ZeroDivisionError:
print("异常,0不能做除数")
except ValueError:
print("异常,无法转化成数字")
except NameError:
print("异常,变量不存在")
except BaseException as e:
print("e")
try...except....else结构
如果try中出现异常,执行except,如果try中没有异常 执行else
try:
a=input("输入被除数")
b=input("输入除数")
c=float(a)/float(b)
print(c)
except ZeroDivisionError:
print("异常,0不能做除数")
except ValueError:
print("异常,无法转化成数字")
except NameError:
print("异常,变量不存在")
except BaseException as e:
print("e")
else:
print("结果是",c) #加一个else
try...except...finally结构
无论是否发生异常 finally都被执行,通常用来释放资源
try:
a=input("输入被除数")
b=input("输入除数")
c=float(a)/float(b)
print(c)
except ZeroDivisionError:
print("异常,0不能做除数")
except ValueError:
print("异常,无法转化成数字")
except NameError:
print("异常,变量不存在")
except BaseException as e:
print("e")
else:
print("结果是",c) #加一个else
finally:
print("有没有异常都执行")
print("程序结束")
例如要打开的文件不存在 释放资源
try:
f=open("d:/aaaaa","r")
content=f.readline()
print(content)
except BaseException as e:
print(e)
else:
print("结果是",c) #加一个else
finally:
print("有没有异常都执行")
print("关闭资源")
f.close()
print("程序结束")
常见异常解决
一般return放到最后,不要放到异常结构中间
1.SyntaxError:语法错误
2.NameError:尝试访问一个没有被声明的变量
3.ZeroDivisionError 除数为0错误
4.ValueError: 数值错误
5.TypeError 类型错误
6.AttributeError:访问对象不存在的属性
7.IndexError 索引越界
8.KeyError 字典关键字不存在
常见异常汇总
with 上下文管理
文件操作 网络通信场合常用(不是用来取代try,只是补充)
这个是一个异常的案例 没有执行最后一句
with open("d:/aaaaa","r") as f:
content=f.readline()
print(content)
print("结束")
__traceback模块
将异常写入指定文件
import traceback
try:
print("step1")
num=1/10
except:
with open("d:/a.txt","a") as f:
traceback.print_exc(file=f)
自定义异常类
可以继承Exception类
raise 抛出异常
class AgeError(Exception):
def __init__(self,errorInfo):
Exception.__init__(self)
self.errorInfo=errorInfo
def __str__(self):
return "年龄错误"
if __name__=="__main__": # 如果是True 模块作为独立文件运行,可以执行代码
age = int(input("输入一个年龄"))
if age<1 or age>150:
raise AgeError(age)
else:
print("正常的年龄",age)