• 【python】异常处理


    目录

    一, 初识异常

    二, 捕获异常

    1.语法格式

    2. 常见异常

    三, 异常传递

    四, 抛出异常


    一, 初识异常

    程序在运行时,如果python遇到错误,会停止程序的执行,并提示一些错误信息,这就是异常。

    程序停止执行,并提示错误信息的动作称为抛出异常。

    程序在执行过程中很难将所有的特殊情况都处理到,通过异常捕获可以针对突发事件进行集中处理,从而保证程序的稳定性和健壮性。

    二, 捕获异常

    1.语法格式

    python标准错误处理:

    1. try:
    2. 可能出错的地方
    3. except:
    4. 错误捕获,出错时要执行的代码
    5. else:
    6. 没有错误时要执行的代码
    7. finally:
    8. 不管有没有错误都要执行的代码

    示例,输入数字,如果输入的不是数字,则捕获异常并处理。

    1. try:
    2. num = int(input('请输入数字:'))
    3. except:
    4. print('请输入正确的数字')
    5. else:
    6. print('num=',num)
    7. finally:
    8. print('程序测试结束')

    显示结果,如果输入非数字,会提示 ''请输入正确的数字;

    1. 请输入数字:fd
    2. 请输入正确的数字
    3. 程序测试结束
    4. 请输入数字:12
    5. num= 12
    6. 程序测试结束

    简单的异常捕获可以只有 try...except...。

    2. 常见异常

    python定义的常见异常类型如下:

    异常类型说明
    AttributeError属性错误,特性引用和赋值失败时会引发属性错误
    NameError试图访问的变量名不存在
    SyntaxError语法错误,代码形式错误
    Exception所有异常的基类,因为所有python异常类都是基类Exception的其中一员,异常都是从基类Exception继承的,并且都在exception python模块中定义
    IOErrorpython ioerror,输入输出错误,一般常见于打开不存在的文件时引发IOError错误
    KeyError使用了映射中不存在的关键字(键)时引发的关键字错误
    IndexError索引错误,使用的索引不存在,或索引超出序列范围
    TypeError类型错误,某些函数或者方法只适用于特定数据类型,若数据类型操作不当会抛出此错误
    ZeroDivisionError除数为0时抛出此异常
    ValueError值错误,传给对象的参数类型不正确,例如,int()函数中传入了非数字的字符串类型

    通常不需要我们记住这些异常类型,在捕获异常时使用 BaseException 来捕捉错误,打印出具体的错误类型。

    1. try:
    2. 可能出错的地方
    3. except BaseException as e:
    4. print(e)
    5. else:
    6. 没有错误时要执行的代码
    7. finally:
    8. 不管有没有错误都要执行的代码

    对如上代码进行改造:

    1. from ast import Try
    2. from tkinter import E
    3. try:
    4. num = int(input('请输入数字:'))
    5. except BaseException as e:
    6. print(e)
    7. else:
    8. print('num=',num)
    9. finally:
    10. print('程序测试结束')

    显示结果:

    请输入数字:s
    invalid literal for int() with base 10: 's'
    程序测试结束

    另外,还可以使用 traceback 库打印哪一行有错误,错误是什么,如下示例:

    1. import traceback
    2. try:
    3. num = int(input('请输入数字:'))
    4. except BaseException as e:
    5. # traceback.print_exc() 打印出错误类型和错误位置
    6. print(traceback.print_exc())
    7. else:
    8. print('num=',num)
    9. finally:
    10. print('程序测试结束')

    显示结果,会提示哪一行有错误,并且错误类型也会打印出来。

    请输入数字:s
    Traceback (most recent call last):
      File "e:/1_tempFile/1_learn_code/VSCode/python_test/python_exception/try_except.py", line 4, in
        num = int(input('请输入数字:'))
    ValueError: invalid literal for int() with base 10: 's'
    None
    程序测试结束

    三, 异常传递

    当函数/方法执行出现异常,会将异常传递给函数调用的一方;如果传递到主程序,仍然没有异常处理,程序会被终止。

    所以我们可以在主函数中增加异常捕获,在主函数调用的其它函数出现异常,会传递到主函数的异常捕获中。

    示例:在函数func1()中提示用户输入一个整数并返回,func2()调用func1(),主程序调用func2()。

    1. import traceback
    2. def func1():
    3. return int(input('请输入一个整数:'))
    4. def func2():
    5. func1()
    6. if __name__ == '__main__':
    7. try:
    8. func2()
    9. except BaseException as e:
    10. # traceback.print_exc() 打印出错误类型和错误位置
    11. print(traceback.print_exc())
    12. else:
    13. pass
    14. finally:
    15. print('程序测试结束')

    显示结果:

    请输入一个整数:s
    Traceback (most recent call last):
      File "e:/1_tempFile/1_learn_code/VSCode/python_test/python_exception/try_except.py", line 13, in
        func2()
      File "e:/1_tempFile/1_learn_code/VSCode/python_test/python_exception/try_except.py", line 8, in func2 
        func1()
      File "e:/1_tempFile/1_learn_code/VSCode/python_test/python_exception/try_except.py", line 4, in func1 
        return int(input('请输入一个整数:'))
    ValueError: invalid literal for int() with base 10: 's'
    None
    程序测试结束

    四, 抛出异常

    除了代码执行错误导致异常外,还可以根据特定需求抛出异常。

    抛出异常的步骤:

    1. 创建一个Exception的对象;
    2. 使用raise关键字抛出异常对象;

    示例,定义input_password()函数,提示用户输入密码;如果用户输入长度<8,抛出异常;如果用户输入长度>=8,返回输入的密码。

    1. import traceback
    2. def input_password():
    3. pwd = input("请输入密码:")
    4. if len(pwd) >= 8:
    5. return pwd
    6. e = Exception("密码长度不足8位")
    7. raise e
    8. if __name__ == '__main__':
    9. try:
    10. user_pwd = input_password()
    11. print(user_pwd)
    12. except Exception as e:
    13. print(e)
    14. except:
    15. print(traceback.print_exc())

    显示结果:

     全文参考:

    100天精通Python(基础篇)——第19天:异常_无 羡ღ的博客-CSDN博客

    python中如何捕获错误_weixin_43688734的博客-CSDN博客_python错误捕获

  • 相关阅读:
    tictoc例子理解10-13
    一款 IDEA 插件帮你优雅转化 DTO、VO、BO、PO、DO
    广东MES系统在电子厂的重要性
    拜耳阵列(Bayer Pattern)以及常见彩色滤波矩阵(CFA)
    HTML语法标记有什么特点
    案例研究 | 玉湖冷链基于JumpServer实现管理安全一体化
    nginx的正则回溯和灾难性回溯
    OpenStack 手动安装: 为什么 ping 不通 203.0.113.198
    算法 LeetCode 题解 | 两个数组的交集
    mysql中首字母大写的函数,如何借助MySQL函数将字符串的首字母大写?
  • 原文地址:https://blog.csdn.net/sinat_41752325/article/details/126697776