第七章 异常处理

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 / 0
    print(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




猜你喜欢

转载自blog.csdn.net/wshsdm/article/details/80212779