pyhon捕捉异常&&常见错误归纳!

网友投稿 858 2022-05-29

在Python运行遇到异常时,程序会终止;而在我们编程过程中,错误是不可避免的,这时我们需要捕捉到异常,还需要程序继续运行;这时我们就需要根据异常Traceback到出错点,进行分析改正;

1. 异常捕获

当发生异常时,我们就需要对异常进行捕获,然后进行相应的处理。python的异常捕获常用try…except…结构,把可能发生错误的语句放在try模块里,用except来处理异常,每一个try,都必须至少对应一个except。

1.1 捕获所有异常

捕获所有异常的语句如下:

# 捕获所有异常try:      <语句>    # 需要被判断的语言块except:      <异常处理语句>   # 出现异常后的处理语句12345

例子:

import systry:     sys.exit()except:     print('异常被捕捉到啦~~')# 输出:# '异常被捕捉到啦~~'12345678

以上语句中,由于没有指定异常,所有的异常都将被捕捉,甚至包括键盘中断和程序退出请求;(try后的语句中如果使用sys.exit(),无法退出python程序,因为sys.exit()作为异常被捕获了;)

try: <语句>    except Exception: <异常处理语句>   # 出现异常后的处理语句1234

例子:

import systry:     sys.exit()except Exception:     print('异常被捕捉到啦~~')# 程序退出了,说明没有捕捉到异常;1234567

在except后增加Exception,可以捕捉全部异常,但是不会捕捉键盘中断和程序退出请求;

1.2 捕捉指定异常

捕捉指定异常,只需要在except后增加异常的名称即可;这里的异常名称可以使用报错的异常名称;

# 捕捉指定异常try:      <语句>except <异常名>: <异常处理语句>   # 出现异常后的处理语句12345

1.3 捕捉多个异常

把需要捕捉的异常名称全部列在except后,这时异常没有优先级,全部捕捉;

# 捕捉多个异常,不区分优先级try:      <语句>except (<异常名1>, <异常名2>, ...): <异常处理语句>   # 出现异常后的处理语句12345

如果需要区分异常的优先级,则将except按照优先级分开处理,举例如下:

# 捕捉多个异常,区分优先级try:      <语句>except <异常名1>: print('异常说明1')  except <异常名2>: print('异常说明2')  except <异常名3>: print('异常说明3')123456789101112

处理顺序:当异常发生时,先执行异常名1的语句,如果匹配则执行:print(‘异常说明1’),若不匹配,则执行异常名2,以此类推;

pyhon捕捉异常&&常见错误归纳!

备注:1. 这种方式可以支持的except语句的数量没有限制; 2. 如果都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。

1.4 异常中的else

当try语句中没有某些异常时,我们可以添加else语句,来执行其他语句;即:若有异常发生则执行异常处理语句,若无异常发生,则执行else语句;

# 异常中的elsetry: <语句>except <异常名1>: <异常处理语句>   # 有异常发生时,执行该语句  else: <语句>  # 无异常发生时,则执行该语句123456789

1.5 异常中的finally

有些时候,无论try语句中是否有异常,我们都希望执行一些语句,这时候需要使用finally语句;即:无论异常是否发生,都会执行finally语句;

# 异常中的finally语句try:      <语句>  finally:       <语句>123456

2. 用户自定义异常_raise 主动触发异常

在python编程中,我们可以主动触发异常,即:我们可以规定何种情况下生成何种异常;

def not_zero(num):     try:         if num == 0:             raise ValueError('参数为0,参数错误')         return num    except Exception as e:         print('错误类型为:',e.__class__.__name__)         print('错误详情为:',e)not_zero(0)1234567891011

输出:

错误类型为: ValueError 错误详情为: 参数为0,参数错误12

3. 查看异常位置_traceback模块

有时我们需要打印出发生异常的位置,就需要使用traceback模块;举例如下:

import tracebacktry:     1/0except Exception as e:     print(e)     print('---------------------')     traceback.print_exc()     print('---------------------')     a = traceback.format_exc()     print(a)     print('---------------------')1234567891011

输出:

# print(e)的输出结果division by zero------------------------------------------# print(a) 的输出结果Traceback (most recent call last):   File "D:/PY_useful/3_python 基础/11.异常处理.py", line 21, in      1/0ZeroDivisionError: division by zero---------------------# traceback.print_exc()的输出结果,默认的位置是输出结果的最后位置,如本例中,输出在最后Traceback (most recent call last):   File "D:/PY_useful/3_python 基础/11.异常处理.py", line 21, in      1/0ZeroDivisionError: division by zero12345678910111213141516

4. 常见异常名 & 描述

Python

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java---IO加强(1)
下一篇:JVM进阶(七)——从GC日志分析堆内存
相关文章