美文网首页python教程
python21-异常处理

python21-异常处理

作者: 筱媛媛 | 来源:发表于2019-05-25 17:43 被阅读0次

调试Python程序时经常会报出一些异常,这时就需要我们对异常进行捕获处理,防止程序终止,本篇主要围绕异常处理操作而展开。希望感兴趣的小伙伴可以坚持看下去同时欢迎提出宝贵的意见让我们一起进步!

01:什么是异常?

1)概念:异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。异常是Python对象,表示一个错误

2)注意事项:

①一般情况下,在Python无法正常处理程序时就会发生一个异常

②当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

3)异常作用: 出现异常程序不要退出,可以继续执行同时给予程序员一定的异常提示信息

02:常见的异常种类
异常名称 异常描述
SyntaxError 语法错误时会抛出此异常
NameError 使用一个还未被赋予对象的变量
TypeError 传入对象类型与要求的不符合
ZeroDivisionError 进行数学运算时除数为0时会出现此异常
IndexError 下标索引超出序列边界
KeyError 试图访问字典里不存在的键
ImportError 无法引入模块或包;基本上是路径问题或名称错误
IndentationError 代码没有正确对齐,即缩进错误
ValueError 传入一个调用者不期望的值,即传入无效的参数
AssertionError 当assert断言条件为假的时候抛出的异常
OSError 操作系统异常

更多详细的错误参考:https://www.runoob.com/python/python-exceptions.html

03:异常捕获关键字
异常名称 异常描述
try/except 捕获异常并处理
pass 忽略异常
as 定义异常实例(except MyError as e)
else 如果try中的语句没有引发异常,则执行else中的语句
finally 无论是否出现异常,都执行的代码
raise 抛出/引发异常
04:try与except结合用法捕获异常

1)概述:用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。一般捕获已知异常

2)原理:

①首先执行try语句 (try和except关键字之间的(多行)语句)

②如果没有异常发生,则跳过except语句完成try语句的执行。

③如果在执行try语句时发生了异常,则跳过该子句中剩下的部分。若异常类型和 except关键字后面的异常匹配,则执行 except 语句,然后继续执行try语句之后的代码。

④如果发生的异常和 except 语句中指定的异常不匹配,则将其传递到外部的try语句中;如果没有找到处理程序,则它是一个未处理异常,程序将停止

while True:
    num=input('请输入数字:')
    try:
    # 如果除数为0时将抛出ZeroDivisionError异常
        print('100/%s=%s'%(num,100.0/int(num)))
    # 如果捕获到ZeroDivisionError异常将执行except下面的代码块
    except ZeroDivisionError:#已知异常,一一对应
        print('除数不能输入不能为0哟!!')
05:多个except捕获异常

1)一个try语句可能有多个 except 子句,以指定不同异常的处理程序。最多只会执行一个处理程序

2)一个except子句可以将多个异常命名为带括号的元组,这种写法不区分优先级。except (RuntimeError, TypeError):

while True:
    num=input('请输入数字:')
    try:
    # 如果除数为0时将抛出ZeroDivisionError异常
        print('100/%s=%s'%(num,100.0/int(num)))
    # 如果捕获到ZeroDivisionError异常将执行except下面的代码块
    except ZeroDivisionError:
        print('除数不能输入不能为0哟!!')
    except ValueError as error:  # error表示具体的异常信息
        print('除数不能输入字符串哟!!', error)
06:try与except与else捕获异常

1)没有异常的情况下,要执行一段代码

2)else 子句在使用时必须放在所有的 except 代码块后面,finally前面

while True:
    num=input('请输入数字:')
    try:
        print('100/%s=%s'%(num,100.0/int(num)))
    except ZeroDivisionError:
        print('除数不能输入不能为0哟!!')
    except ValueError as error:  
        print('除数不能输入字符串哟!!', error)
    else: #当try代码块中执行没有发现任何异常的时候执行这里的语句 
        print("Program execution successful")
07:try与except与finally捕获异常

1)不管是否有异常,都要执行一段代码。finally一般要放到最后

2)finally子句对于释放外部资源非常有用

3)应用场景:用在打开文件,在文件处理过程过中出异常退出,这时文件没有关闭或者网络连接

try:
    txt = open("C:/Users/qin/Desktop/file1.txt")
    # 上面打开文件默认以r方式打开,这里会抛出IOError异常
    txt.write("这是一个测试文件,用于测试异常!!")
except IOError as e:    # e为异常信息
    print("异常信息为:",e)
finally: #不管有没有民常都会执行finally代码块中的语句
    txt.close()
08:捕获所有异常(Exception)

1)Exception是所有异常的父类,但是不能通过该程序识别出具体的异常信息

while True:
    num=input('请输入数字:')
    try:
        print('100/%s=%s'%(num,100.0/int(num)))
    except Exception as error:  # 异常的父类:所有异常
         print('有异常!!', error)
09:捕获具体异常(traceback)

1)traceback可以用来捕获未知异常具体信息

import traceback#捕获具体异常信息模块
while True:
    num=input('请输入数字:')
    try:
        print('100/%s=%s'%(num,100.0/int(num)))
    except:
        print('有异常!!', traceback.format_exc())  # 捕获具体异常信息
10:主动触发异常(raise)

1)raise语句允许程序员强制发生指定的异常

2)格式:raise 异常类型; raise也可单独使用

for one in range(1,6):
    if one ==2:
        raise ValueError("当i等于2时抛出这个异常")
    print(one)
11:自定义异常

1)Python中也可以自定义特殊类型的异常,只需要从Exception类继承(直接或间接)即可

class SomeException(Exception):
    pass
12:断言(assert)

1)使用场景:如果后续代码比较重要且依靠前面的数据/状态

tel=input('请输入手机号:')
assert len(tel)==11,'手机号位数有误'
print('我在测试手机号长度')
13:捕获异常注意事项

1)常用的异常场景:WebUI元素定位、打开文件、数据库连接、调用接口等

2)不是所有的代码都做异常处理,会使代码逻辑看起来复杂化

相关文章

  • python21-异常处理

    调试Python程序时经常会报出一些异常,这时就需要我们对异常进行捕获处理,防止程序终止,本篇主要围绕异常处理操作...

  • 同步或异步异常处理

    同步或异步异常处理 同步读取异常处理 异步读取文件异常处理

  • Java 异常

    异常处理机制 异常处理模型:终止模型:当异常发生时,就进入异常处理程序,处理结束并不返回异常发生位置继续执行;恢复...

  • 第十二章:异常处理

    异常处理语法格式: try: ...处理语句 except 异常类型: ...异常处理语句 pytho...

  • Spring MVC 全局统一异常处理(注解方式)

    全局异常处理 对异常处理类增加@ControllerAdvice 增加异常处理方法,使用@ExceptionHan...

  • 异常处理设计文档

    一、异常处理流程说明 在ESB处理过程中,若发生异常,将进入异常流程的处理。一个异常处理流程大致如下: ESB处理...

  • Java异常处理机制

    什么是异常处理机制: 异常处理机制: 让程序发生异常时,按照代码预先设定的异常处理逻辑,针对性地处理异常,让程序尽...

  • ASP .NET Core Web API_05_异常处理

    默认异常处理 自定义异常处理

  • springboot 异常捕获和处理

    springboot 异常捕获和处理 异常捕获处理

  • NDK开发---C++学习(七):异常

    前言 C++的异常处理机制能够将异常检测与异常处理分离开来,当异常发生时,它能自动调用异常处理程序进行错误处理。把...

网友评论

    本文标题:python21-异常处理

    本文链接:https://www.haomeiwen.com/subject/imqezqtx.html