L7-2 异常处理

Posted xiaoxiao-ya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L7-2 异常处理相关的知识,希望对你有一定的参考价值。

一、课堂导入

上节课我们学习了文件操作的文本处理,知晓了如何打开、关闭文件,本节课我们将学习处理操作中的问题。

二、异常处理

我们在编写程序时,有时候会踩很多的坑,我们时长是在写bug与改bug的路上。为了减少bug的产生,本节课我们要开始学习制造bug后的修复操作。

1.什么是异常

异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下

技术图片

 

 

 

2.异常的种类

# AttributeError:尝试访问的对象不存在,比如foo.x,但是foo没有属性x
# IndexError:尝试访问的索引值超出系列范围,,比如当x只有三个元素,却试图访问x[5]
# KeyError:试图访问字典里不存在的键
# NameError:尝试要访问的变量不存在
# SyntaxError:Python代码非法,代码不能编译(没有按照语法要求来写)
# TypeError:传入对象类型与要求的不符合(对不同的数据类型进行操作出错)
# ZeroDivisionError:除数不能为0,除0会报错
# FileNotFoundError:使用文件,找不到文件

3.处理异常

主要分为三种方式:

技术图片

 3.1 如果错误发生的条件是不可预知的,则需要用到try...except:在错误发生之后进行处理

  try-except语句检测try语句 块中的错误,让except语句 捕获异常并处理

#基本语法为
try:
    被检测的代码块
except 异常类型:
    try中一旦检测到异常,就执行这个位置的逻辑
#举例

try:
  dic={"name":"Rita","age":17}
  del dic["sex"]
except KeyError:
  print("所要删除的键不存在")

3.2 try-finally 语句无论 是否发生异常都将 执行最后的代码

# 基本语法
try:
    被检测的代码块
finally:
    try 中检测的异常

try:
    fh=open("homework.txt","w")
    fh.write("我的作业写完了")
    sum=1+"1"
finally:
    fh.close()
    print("Erro:没有找到文件或读取文件失败")

3.3 try-except-else 如果有异常,执行except语句,如果没有异常执行else语句

try:
    f=open("homework.txt","w",encoding="utf-8")
    f.write("我的作业可算写完了")
except FileNotFoundError:
    print("Error:没有找到文件或读取文件失败")
else:
    print("内容写入文件成功")
    f.close()

三. 实践

简单的除法计算器

需求:程序要能处理无效的输入,例如当输入的除数是0的时候,提示除数不能为0。

print("请输入两个数,让他门进行比较:")
while True:
    first_num=int(input("请输入第一个数字:"))
    if first_num=="q":
        break
    second_num=int(input("请输入第二个数字:"))
    try:
        answer=int(first_num)/int(second_num)
    except ZeroDivisionError:
        print("除数不能为0")
    else:
        print(answer)

四、总结

# 1.一般情况下,在Python无法正常处理程序时就会发生一个异常。
# 2.当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。
# 3.在Python中用try-except语句、try-finally语句、else语句处理异常。

以上是关于L7-2 异常处理的主要内容,如果未能解决你的问题,请参考以下文章

PCL异常处理:pcl 1.8.13rdpartyoostincludeoost-1_64oost ypeofmsvc ypeof_impl.hpp(125): error(代码片段

使用片段中的处理程序时出现非法状态异常

Java异常处理机制

java 反射代码片段

java.util.MissingResourceException: Can't find bundle for base name init, locale zh_CN问题的处理(代码片段

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段