当前位置:   article > 正文

【python】异常处理_python 异常处理

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 <module>
    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 <module>
    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错误捕获

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/209303
推荐阅读
相关标签
  

闽ICP备14008679号