只会处理普通异常:Exception
异常本身就是异常类的实例
一、常见的3种异常
# a 没有定义
NameError: name 'a' is not defined
# 语法错误
SyntaxError: invalid character in identifier
# 类型错误
TypeError: unsupported operand type(s) for +: 'int' and 'str'
二、异常处理
1、try…except…
"""
try:
先执行,发现异常,捕获异常,执行except里面的代码
except:
捕获异常时,执行的功能块
"""
print("one")
try:
aaa
except:
print("three")
print("two")
#巩固
try:
5 - "a"
except:
print("发生了异常")
print("ok")
2、捕获具体异常
让你捕获你想要捕获的异常,不想捕获的正常抛出异常
try:
1/0
except TypeError:
print("类型错误")
except FileExistsError:
print("文件错误")
except Exception as e:
print("其他的普通异常")
print(e)
3、自动抛出异常
raise
try:
raise TypeError("主动抛出的类型错误") # 自制异常
except FileExistsError:
print("文件错误")
except Exception as e:
print("其他的普通异常")
print(e)
实际应用
def func(name):
if name == "熊二":
raise TypeError("黑名单用户,拒绝访问")
func("熊二")
4、else和finally
else:
print("else") # 有异常时,不执行,无异常时执行
print("有异常时,不执行,无异常时执行")
finally:
print("finally") # 有无异常时,都执行
print("有无异常时,都执行")
5、自定义异常类型
class ZdyError(Exception):
pass
def func(name):
if name == "原擎":
print("允许登录")
else:
raise ZdyError("你不是原擎,不许登录!!!")
try:
func("句号")
except Exception as e:
print(e)
6、断言
assert
a = 1
b = 2
print(a > b) # False
print(a < b) # True
assert a < b
# assert a > b # 条件不满足时,抛出AssertionError异常,后续程序终止
print("ok") # 条件满足,正常执行
比较raise
def func(name):
if name == "熊二":
raise TypeError("黑名单用户,拒绝访问")
func("熊二")
def func(name):
assert name != "熊二"
func("熊二") # AssertionError 异常