异常
- 异常是什么?
Python用异常对象(exception object)来表示异常情况。
遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(traceback, 一种错误信息)终止执行。
ipt = input("请输入:")
num = int(ipt)
print(num) # valueError
fl = float(ipt)
print(fl)
prin("") #NameError: name 'prin' is not defined 代码执行停止
a = 2
print(a)
捕获异常
- 查看异常类型
ipython交互环境下输入help(builtin)查看error
In [1]: help(__builtin__)
Help on built-in module builtins:
- try-except-else-finally
- 在日常维护中,需要把错误记录分类好写入日志,方便以后维护
try:
正常程序时,执行的代码块
except:
抛出异常时,捕捉异常,且自动执行该代码块
else:
没有出错,则执行else
finally:
不管出不出错,肯定执行
try:
ipt = input("请输入")
num = int(ipt)
print(num)
except Exception as e: # Exception匹配了所有异常,把异常名称赋给了e
# 一旦有异常,执行except代码块
print(e)
num = 1
print(num)
try: # 正常执行时输出try里面代码
# li = [1,2]
# li[2] # IndexError: list index out of range
a = 2
b = 0
c = a/b
print(c) # ZeroDivisionError: division by zero
except IndexError as e:
# 要分类记录好
print(e)
except ZeroDivisionError as e:
print(e)
except Exception as e: # exception 父类
print(e)
else:
print("如何没有错误,执行else里面的代码")
finally: # 文件读写操作会用到
# f.close()
print("不管有没有异常,都执行")
触发异常 raise
# 判断一下熟没有熟的状态
def test(time):
if time < 5:
raise Exception("还没有熟") # 没熟的异常
try:
test(4)
except Exception as e:
print(e)
else:
print("顾客请吃")
# 模拟数据库
def db():
# 模拟数据库
raise Exception("数据库错误")
def demo():
try:
db()
except Exception as e:
print(e, "错误1") # 记录数据库主动抛出的异常错误
try:
li = [1, 2]
print(li[3])
except Exception as e:
print(e, "错误2") # 这里记录demo代码块的错误demo()
自定义异常
- 创建一个新的异常类,根据自己的需求拟定异常规则,继承Exception类
class Mistake(Exception): # 继承父类Exception
def __init__(self,msg):
self.msg_error = msg
def __str__(self): # 实例化时的返回信息
return self.msg_error
try:
raise Mistake("电脑错了") # 相当于实例化类
except Exception as e:
print(e)
断言assert
- 形式:assert condition, your message
- condition为True时,程序继续运行,下一个语句会被执行
- condition为False时将会抛出AssertionError异常,该异常的信息为your message
- assert常常用来调试和测试
# print("----1----")
# assert 1 == 2 # 一般用于强制用户服从
# print("----2----")
网友评论