1 python中异常处理
1.1 程序中的异常
程序中的出现的异常会终止程序的继续运行,如
x=8/0
print(x)
print('over...')
结果引发了ZeroDivisionError: division by zero错误,终止程序继续运行
1.2 raise语句
当输入数据违反业务规则时,可以使用raise语句手工抛出错误,如
xage=input('请输入年龄')
if int(xage)<1:
raise Exception('年龄信息不正确!')
print('hello....')
python内置常见异常类:
Exception 几乎所有的异常类都是从它派生而来的
AttributeError 引用属性或给它赋值失败时引发
OSError 操作系统不能执行指定的任务(如打开文件)时引发,有多个子类
IndexError 使用序列中不存在的索引时引发,为LookupError的子类
KeyError 使用映射中不存在的键时引发,为LookupError的子类
NameError 找不到名称(变量)时引发
SyntaxError 代码不正确时引发
TypeError 将内置操作或函数用于类型不正确的对象时引发
ValueError 将内置操作或函数用于这样的对象时引发:其类型正确但包含的值不合适
ZeroDivisionError 在除法或求模运算的第二个参数为零时引发
1.3 自定义异常
class myerr(Exception):
pass
xage=-8
if int(xage)<1:
raise myerr('年龄信息不正确!')
2 python中异常处理
2.1 try...except捕获异常
例,防止因为异常终止程序继续执行
xage=input('请输入年龄')
try:
if xage<1:
raise Exception('年龄信息不正确!')
except Exception:
print('年龄不对?')
print('结束...')
2.2 使用没有参数的raise
直接报错,终止程序执行
try:
z = 8 / 0print(f"z={z}")
except ZeroDivisionError:
raise
print('over')
使用raise ValueError引发报错
try:
z = 8 / 0
print(f"z={z}")
except ZeroDivisionError:
raise ValueError
print('over')
使用raise...from提供自定义的异常上下文
try:
z = 8 / 0
print(f"z={z}")
except ZeroDivisionError:
raise ValueError from print('ok err..')
print('over')
2.3 使用多个except
x=8
y='0'
try:
z=x/y
except TypeError:
print("类型错误")
except ZeroDivisionError:
print('除0错误')
print('结束')
2.4 使用元组捕获多个异常
x=8
y='0'
try:
z=x/y
except (TypeError,ZeroDivisionError):
print("类型错误或除0错误")
print('结束')
2.5 捕获错误对象
x=8
y='0'
try:
z=x/y
except (TypeError,ZeroDivisionError) as t:
print(f"类型错误或除0错误{t}")
print('结束')
2.6 except不指定错误类型
python可以不指定错误类型,当发生错误时直接捕获
try:
z=x/y
except:
print("一定有错误...")
print('结束')
2.7 try...except...else结构
该结果在try中的代码没有引入错误时,执行else部分的语句
2.8 try...[except...]finally:...
finally部分无论是否发生错误都会执行
2.9 警告以及过滤
可使用模块warnings中的函数filterwarnings来抑制你发出
的警告(或特定类型的警告),并指定要采取的措施,如"error"或"ignore"
from warnings import warn
from warnings import filterwarnings
x=8
y='0'
try:
# warn('yes')
filterwarnings('error')
z=x/y
except:
print("一定有错误...")
print('结束')
http://developer.51cto.com/art/201805/571944.htm