首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python基础异常 处理方法

一、异常简介

1.异常

程序在运行过程当中,不可避免的会出现一些错误,比如:

使用了没有赋值过的变量

使用了不存在的索引

除0

...

这些错误在程序中,我们称其为异常。

程序运行过程中,一旦出现异常将会导致程序立即终止,异常以后的代码全部都不会执行!

name Error 变量没定义

常见异常类型中文说明:

Systax Error 语法错误

IO Error 文件错误

Zero DivisionError 10/0,除零错误

Value Error 值错误

Keyboard Interrupt 强制终止程序产生,ctrl+c终止程序运行

2.处理异常

程序运行时出现异常,目的并不是让我们的程序直接终止!

Python是希望在出现异常时,我们可以编写代码来对异常进行处理!

try语句

try:

代码块(可能出现错误的语句)

except 异常类型 as 异常名:

代码块(出现错误以后的处理方式)

except 异常类型 as 异常名:

代码块(出现错误以后的处理方式)

except 异常类型 as 异常名:

代码块(出现错误以后的处理方式)

else:

代码块(没出错时要执行的语句)

finally:

代码块(该代码块总会执行)

try是必须的 else语句有没有都行

except和finally至少有一个

可以将可能出错的代码放入到try语句,这样如果代码没有错误,则会正常执行,

如果出现错误,则会执行expect子句中的代码,这样我们就可以通过代码来处理异常

避免因为一个异常导致整个程序的终止

二、异常传播

异常的传播(抛出异常)

当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播,

如果函数中没有对异常进行处理,则异常会继续向函数调用处传播,

如果函数调用处处理了异常,则不再传播,如果没有处理则继续向调用处传播

直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并且显示异常信息

当程序运行过程中出现异常以后,所有的异常信息会被保存一个专门的异常对象中,

而异常传播时,实际上就是异常对象抛给了调用处

比如 : ZeroDivisionError类的对象专门用来表示除0的异常

NameError类的对象专门用来处理变量错误的异常

....

在Python为我们提供了多个异常对象

抛出异常

- 可以使用 raise 语句来抛出异常,

- raise语句后需要跟一个异常类 或 异常的实例

常见异常类型中文说明:

三、异常对象

print('异常出现前')

l = []

try:

# print(c)

# l[10]

# 1 + 'hello'

print(10/0)

except NameError:

# 如果except后不跟任何的内容,则此时它会捕获到所有的异常

# 如果在except后跟着一个异常的类型,那么此时它只会捕获该类型的异常

print('出现 NameError 异常')

except ZeroDivisionError:

print('出现 ZeroDivisionError 异常')

except IndexError:

print('出现 IndexError 异常')

# Exception 是所有异常类的父类,所以如果except后跟的是Exception,他也会捕获到所有的异常

# 可以在异常类后边跟着一个 as xx 此时xx就是异常对象

except Exception as e :

print('未知异常',e,type(e))

finally :

print('无论是否出现异常,该子句都会执行')

print('异常出现后')

四、自定义异常对象

异常对象处理使用系统内置异常外,还可以自己创建异常类

自定义异常类,只需要创建一个类继承Exception(所有异常类的父类)即可

class MyError(Exception): #创建一个Exception的子类

pass #主体部分我们可以写属性和方法,也可以留空

raise用于向外部(全局)抛出异常,后边可以跟一个异常类,或异常类的实例,

def add(a,b):

# 如果a和b中有负数,就向调用处抛出异常

if a

# raise Exception

# 抛出异常的目的,告诉调用者这里调用时出现问题,希望你自己处理一下

# raise Exception('两个参数中不能有负数!')

raise MyError('自定义的异常')

# 也可以通过if else来代替异常的处理

# return None

r = a + b

return r

print(add(-123,456))

函数中自定义抛出异常,可以解决输入不规范或者错误的情况,强制调用者进行修改,也可以使用if语句 和return代替,但是相对比较麻烦

山东掌趣网络科技

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200402A0A8KM00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券