Python的异常捕获和处理浅谈

程序在运行过程当中,不可避免的会出现一些错误,比如:使用了没有赋值过的变量,使用了不存在的索引,一个数字除以0,这些错误在程序中,我们称其为异常,那么如何处理这些异常呢,今天我们就来看一看

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

1 | 语法错误

指解析代码时出现的错误。当代码不符合Python 语法规则时,Python解释器在解析时就会报出 SyntaxError 语法错误,与此同时还会明确指出最早探测到错误的语句。例如:

1

print "Hello,World!"

我们知道,Python 3.0已不再支持上面这种写法,所以在运行时,解释器会报如下错误:

SyntaxError: Missing parentheses in call to 'print'

语法错误多是开发者疏忽导致的,属于真正意义上的错误,是解释器无法容忍的,因此,只有将程序中的所有语法错误全部纠正,程序才能执行。

2 | 运行时错误

运行时错误,即程序在语法上都是正确的,但在运行时发生了错误。例如:

1

a = 1/0

上面这句代码的意思是“用 1 除以 0,并赋值给 a 。因为0 作除数是没有意义的,所以运行后会产生如下错误:

Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 1/0 ZeroDivisionError: division by zero

3 |其他异常

以上运行输出结果中,前两段指明了错误的位置,最后一句表示出错的类型。在 Python 中,把这种运行时产生错误的情况叫做异常(Exceptions)

这种异常情况还有很多,常见的几种异常情况如下表:

异常类型含义实例
AssertionError当 assert 关键字后的条件为假时,程序运行会停止并抛出此异常

>>> assert 1>0

>>> assert 1<0

AssertionError

AttributeError当试图访问的对象属性不存在时,抛出的异常

>>> s="hello"

>>> s.len

AttributeError: 'str' object has no attribute'len'

IndexError索引超出序列范围,会引发此异常

>>> s="hello"

>>> s[5]

IndexError: string index out of range

KeyError字典中查找一个不存在的关键字时,引发此异常

>>> demo_dict={"age": 20}

>>> demo_dict["name"]

KeyError: 'name'

NameError尝试访问一个未声明的变量时,引发此异常

>>> hello

NameError: name 'hello' is not defined

TypeError不同类型数据之间的无效操作

>>> 1+"2"

TypeError: unsupported operand type(s) for +: 'int' and 'str'

ZeroDivisionError除法运算中除数为 0 引发此异常

>>> a = 1/0

ZeroDivisionError: division by zero

4 | 异常处理

程序运行时出现异常,目的并不是让我们的程序直接终止!Python是希望在出现异常时,我们可以编写代码来对异常进行处理!

Python 提供了try except语句捕获并处理异常,该异常处理语句的基本语法结构如下:

1

2

3

4

5

6

try:

    # 可能产生异常的代码块

except [(Error1, Error2, ...) [as e]]:

    # 处理异常的代码块1

except [(Error3, Error4, ...) [as e]]:

    # 处理异常的代码块2

该格式中,[ ] 括起来的部分可以使用,也可以省略。其中各部分的含义如下:

  • (Error1, Error2,...) 、(Error3, Error4,...):其中,Error1、Error2、Error3 和Error4 都是具体的异常类型。显然,一个 except 块可以同时处理多种异常。
  • [as e]:作为可选参数,表示给异常类型起一个别名 e,这样做的好处是方便在except 块中调用异常类型(后续会用到)。
  • [Exception]:作为可选参数,可以代指程序可能发生的所有异常情况,其通常用在最后一个 except 块。
  • 注:except 后面也可以不指定具体的异常名称,这样的话,表示要捕获所有类型的异常。

另外,从 try except 的基本语法格式可以看出,try 代码块仅有一个,但except 代码块可以有多个,这是为了针对不同的异常类型提供不同的异常处理方式。当程序发生不同的意外情况时,会对应不同的异常类型,Python 解释器就会根据该异常类型来决定使用哪个 except 块来处理该异常。

来源:微点阅读  https://www.weidianyuedu.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值