1.异常捕获 try/except
# 异常捕获
try:
a = 1
b = '2'
c = a + b # 属于TypeError
print(c)
except ValueError as err:
print('值错误:{0}'.format(err))
# except TypeError as err:
# print('类型错误:{0}'.format(err))
except:
print('未知错误')
以上结果会输出:未知错误
如果不注释红色代码:
那么输出结果是:
类型错误:unsupported operand type(s) for +: 'int' and 'str'
为什么会出现此情况:try可以搭配多个except,并且只能执行一个分支。TypeError正好符合此异常情况,因此执行了TypeError的代码,此后就不会再执行最后蓝色的代码
注意:如果将TypeError的代码移动到最后,输出结果会是什么?
结果就是运行后会报错:SyntaxError: default 'except:' must be last
因此需要将 'except:'放到最后才能正常运行
2.异常捕获 try/except/else
# 当存在异常情况
try:
a = 1
b = '2'
c = a + b # 属于TypeError
print(c)
except TypeError as err:
print('值错误:{0}'.format(err))
else:
print('else子句执行')
输出结果:
值错误:unsupported operand type(s) for +: 'int' and 'str'
# 无异常的情况,执行else子句
try:
a = 1
b = 2
c = a + b
print(c)
except TypeError as err:
print('值错误:{0}'.format(err))
else:
print('else子句执行')
输出结果:
3
else子句执行
3.异常捕获 try/finally 无论有无异常,finally都会执行
# 异常捕获 try/finally 有异常情况
try:
a = 1
b = '2'
c = a + b # 属于TypeError
print(c)
finally:
print('finally子句执行')
输出结果:
TypeError: unsupported operand type(s) for +: 'int' and 'str'
finally子句执行
# 异常捕获 try/finally 无异常情况
try:
a = 1
b = 2
c = a + b
print(c)
finally:
print('finally子句执行')
输出结果:
3
finally子句执行
4.异常处理 try except else finally组合
# 异常捕获 try except else finally 有异常被捕获
try:
a = 1
b = '2'
c = a + b # 属于TypeError
print(c)
except TypeError as err:
print('值错误:{0}'.format(err))
else:
print('else子句执行')
finally:
print('finally子句执行')
输出结果:
值错误:unsupported operand type(s) for +: 'int' and 'str'
finally子句执行
# 异常捕获 try except else finally 无异常被捕获
try:
a = 1
b = 2
c = a + b # 属于TypeError
print(c)
except TypeError as err:
print('值错误:{0}'.format(err))
else:
print('else子句执行')
finally:
print('finally子句执行')
输出结果:
3
else子句执行
finally子句执行
5.异常抛出 raise
# 异常抛出 raise
x = 10
if x > 5:
raise Exception('错误:{}'.format(x)) # 抛出异常
x = 3
print(x)
输出结果:
Exception: 错误:10 -------raise后面的语句不会执行
注意:1)当单独用raise
2)raise 异常类
3)raise 异常类且带参数
以上三种情况,抛出的错误不一样
x = 10
if x > 5:
raise Exception('错误:{}'.format(x)) # 输出:Exception: 错误:10
# raise Exception # 输出:Exception
# raise # 输出:RuntimeError: No active exception to reraise
x = 6
print(x)
6.自定义异常类,继承Exception即可
class SimplError(Exception): def __init__(self, num): self.num = num try: raise SimplError('ok') except SimplError as err: print('err', err.num)