异常知识点的总结
第一部分:异常及异常处理
思考:
1.什么是异常? python中有哪些异常?===》异常本身是类
print(a) # NameError: name 'a' is not defined 错误类型 NameError
print(3+'a') # TypeError: unsupported operand type(s) for +: 'int' and 'str'
def f:
print(123) # SyntaxError: invalid syntax 语法错误
以上都是没有按照 python 规定写会报出异常
NameError # class NameError(Exception):
TypeError # class TypeError(Exception):
在控制台出现的异常都继承Exception
2.如何通过程序的报错来找到有问题的代码?
例1:只有出现异常情况才会捕获(即执行except代码块)
try:
# 可能会出现错误的代码,相应的进行处理
# print(a) # 出现异常才会捕获
# print(1+1) # 不会出现异常
print(1+'a')
# def f: # 语法错误就不应该发生
# print(123)
except: # 捕获会出现的异常,并作出相应处理。如果无异常不会去捕获,出了异常捕获,但是语法错误无法捕获。
print('服务器错误,稍后请重试!!!')
运行截图:
例2:无异常不会去捕获
例3:抛出异常信息
# 异常的几种情况
try:
# 可能会出现错误的代码,相应的进行处理
# print(a) # 会出现异常才会捕获
# print(1+1) # 不会出现异常
# print(1+'a')
print(3/0)
# def f: # 语法错误就不应该发生
# print(123)
except NameError as e: # 制定名字异常
print('服务器错误,稍后请重试!!!')
a='123'
print(e) # name 'a' is not defined
except TypeError as e: # 制定类型异常
print('类型错误')
print(e)
# 可能还有其他错误的,不管什么错误都要捕获
except ZeroDivisionError as e:
print(e)
# raise e # 抛出异常信息 错误在哪个地方 便于我们排查代码错误信息
except Exception: # 不管什么异常都会捕获,大范围的捕获,这行代码放置在最后(其他制定异常之后)
print('报错了')
# 如果try下面没有异常情况会会执行以下代码 ,如 print(1+1)
else:
print('这里是else里面的代码')
# 不管try下面有没有异常都会触发以下代码
finally:
print('这里是finally')
print(123)
运行截图:
如果抛出异常信息:
except ZeroDivisionError as e:
print(e)
raise e # 抛出异常信息 错误在哪个地方 便于我们排查代码错误信息
运行截图:
例4:如果没有异常情况,会执行else语句代码块
try: print(1+1) # 不会出现异常 except NameError as e: # 制定名字异常 print('服务器错误,稍后请重试!!!') a='123' print(e) # name 'a' is not defined except TypeError as e: # 制定类型异常 print('类型错误') print(e) # 可能还有其他错误的,不管什么错误都要捕获 except ZeroDivisionError as e: print(e) raise e # 抛出异常信息 错误在哪个地方 便于我们排查代码错误信息
print(123eee) # 上面抛出异常信息就不再执行这行代码了 except Exception: # 不管什么异常都会捕获,大范围的捕获,这行代码放置在最后(其他制定异常之后) print('报错了') # 如果try下面没有异常情况会会执行以下代码 ,如 print(1+1) else: print('这里是else里面的代码') # 不管try下面有没有异常都会触发以下代码 finally: print('这里是finally') print(123) # 如果前面有抛出异常信息就不会再执行后面的了
运行截图:
第二部分:断言(assert)
思考:
1. 如何能在代码中强制要求 一个条件满足 ?
2.是否有专门的语法来完成 ?
assert isinstance(5,str) # AssertionError
# assert isinstance(5,int)
运行截图:
assert 5==5
assert 5==4 # AssertionError
运行截图:
a=5
# assert isinstance(5,str) # AssertionError
# assert isinstance(5,int)
# assert 5==5
# assert 5==4 # AssertionError
assert isinstance(a,str),'a不是str类型(错误的提示)'
print(a) # 前面有断言的话这行代码不再执行
运行截图:
第三部分:练习
01:自己构造一个报错的场景,并进行一个报错分析
(报错的类型,报错的原因,报错的代码,和报错的行)
print(a) # NameError: name 'a' is not defined
02:结合异常处理,确保打开文件后的正常关闭
用open直接打开一个文件,然后write进行写入,假设在写入的
时候可能会报错写段代码确保 报错的情况下依然可以把文件关闭掉。
try:
f=open('file01.txt','w')
f.write(123)
f.close() # 如果没有异常程序到这里就结束!
# print(a)
# print(123)
except Exception as e: # 报错的时候
print(e) # write() argument must be str, not int
# f.close()
finally:
f.close()
# print(f.read()) # 在这里不可以读取
运行截图:
注意事项(如果try代码块异常程序就不再继续执行下面的代码了)
try: print(a) print(123) # 如果上面一行代码出错就不再执行这行代码 except Exception as e:# 捕获异常 print(e) print(456)
运行截图: