程序运行时出现异常,如果不处理会导致程序运行终止。如果不想让程序因异常而终止则需要对异常进行处理。
#常见的异常类型有:
ValueError: 传入值不正确
NameError: 没有被赋值的变量,not defined
KeyError: 访问字典里不存在的Key值
IndexError: 超出索引范围
IndentationError: 语法错误
AttributeError:属性错误
TypeError:类型错误
等
try except
try:
(代码)
except (异常类型):
(接下来执行的代码)
print('2')
try:
print(qqq)
except NameError:
print('错误')
print('111')
2
错误
111
如果except的异常类型不符,依然报错,程序依然停止:
print('2')
try:
print(qqq)
except IndexError: # 类型更改下
print('错误')
print('111')
2
print(qqq)
NameError: name 'qqq' is not defined
try:
print('1')
print('2')
print(qqq)
print('3')
print('4')
except NameError: # 检测到异常执行下面代码,结果里没有3,4
print('错误')
# 1
# 2
# 错误
try:
print('1')
print('2')
print(qqq)
print('3')
print('4')
except NameError as e: # 把错误的值赋给e
print(e)
# 1
# 2
# name 'qqq' is not defined
try后面可以跟很多except 捕获多种异常
try except Exception:
Exception 万能异常
try:
print('1')
print('2')
print(qqq)
print('4')
except Exception as e:
print(e)
# 1
# 2
# name 'qqq' is not defined
try except finally
不管有没有异常都会执行finally之后的代码,没有异常执行else之后的。
try:
print('1')
print('2')
print(qqq)
print('4')
except Exception as e:
print(e)
else:
print('没有异常')
finally:
print('最终都会执行')
# 1
# 2
# name 'qqq' is not defined
# 最终都会执行
try:
print('1')
print('2')
# print(qqq)
print('4')
except Exception as e:
print(e)
else:
print('没有异常')
finally:
print('最终都会执行')
1
2
4
没有异常
最终都会执行
自定义错误类型
# 自定义异常类型:
class MyError(BaseException): # 继承BaseException
def __init__(self, msg):
super(MyError, self).__init__(msg)
self.msg = msg
def __str__(self): # 自定义显示信息
return '出错啦'
raise MyError('错误')
# raise MyError('错误')
# __main__.MyError: 出错啦