python异常处理

1 什么是异常

在计算机编程中,异常(Exception)是指在程序执行过程中发生的错误或异常情况。当出现异常时,程序无法正常继续执行,因此需要采取一些特殊的措施来处理异常,以防止程序崩溃或产生意外结果。

异常可以在程序中的任何地方发生,可能是由错误的输入、无效的操作、资源不足、硬件问题或其他未预料的情况引起的。例如,当尝试除以零、访问不存在的文件、连接失败等情况发生时,都会引发异常。

在Python等高级编程语言中,异常处理机制提供了一种结构化的方式来捕获和处理异常。通过在程序中使用try-except语句块,可以捕获并处理异常,让程序能够优雅地处理错误情况。在try块中放置可能引发异常的代码,在except块中编写处理异常的代码。

异常处理的目的是让程序有能力检测和响应异常情况,以及提供适当的错误处理和恢复机制。通过捕获和处理异常,我们可以避免程序崩溃、提供友好的错误提示、执行备用操作或回滚之前的操作,从而提高程序的稳定性和容错性。

说白了,异常是指在程序执行期间发生的错误或异常情况,是一种不可避免的行为,而异常处理是一种机制,用于检测和处理这些异常情况,以保证程序能够继续执行,并提供适当的错误处理和恢复机制。

2 异常处理方法

2.1 try - except

在实际中,常常使用try-except语句来对异常进行捕获,try中放置可能引发异常的代码,,而except块中定义对异常的处理逻辑。当try块中的代码引发异常时,程序将跳转匹配的excep块进行处理。可以使用不同的except块处理不同类型的异常,也可以使用一个except块处理多个异常类型。

处理一个异常或者一个except块处理多个异常时:

try:
    # 可能引发异常的代码
except ExceptionType:
    # 处理异常的逻辑

在这个示例中,int(input("请输入一个整数:"))语句可能引发ValueError异常,如果用户输入的不是有效的整数。如果引发了该异常,程序会跳转到except ValueError块内部的逻辑,打印出错误信息。

"""捕获单个异常类型:try-except语句块只会触发一个类型的异常,这时候可以指定具体的异常类型"""
try:
    num = int(input("请输入一个整数:"))
    result = 10 / num
    print("结果:",result)
except ValueError:
    print("输入的不是有效的整数")
"""捕获多个异常类型:try-except语句块会触发多种类型的异常,不管先捕获哪种类型的异常,程序都会跳到except那里。"""
try:
    num1 = int(input("请输入一个整数:"))
    num2 = int(input("请输入另一个整数:"))
    result = num1 / num2
    print("结果:", result)
except (ValueError, ZeroDivisionError):
    print("输入的不是有效的整数或除数不能为零")

在这个示例中,我们使用了一个元组(ValueError, ZeroDivisionError)作为异常类型的参数,在except语句中捕获了ValueErrorZeroDivisionError两种异常类型。

"""捕获所有异常:这种方式是最方便快捷的,因为很多时候开发人员也不知道程序要触发的异常的具体名称,直接捕获所有异常,是最快捷的。"""
try:
   file = open("data.txt", "r")
   content = file.read()
   file.close()
except Exception as e:
   print("发生异常:", str(e))

在这个示例中,尝试打开文件data.txt进行读取操作。如果在打开或读取文件的过程中发生了任何异常,程序会跳转到except Exception as e块内部的逻辑,打印出异常信息。

2.2 try - except - else

        可以在try-except语句中添加一个可选的else语句块,用于处理在try块中没有引发异常时需要执行的代码。else块中的代码将在try块中的代码执行完毕,并且没有引发任何异常时执行。

try:
   # 可能引发异常的代码
except ExceptionType:
   # 处理异常的逻辑
else:
   # 没有异常发生时执行的代码

2.3 try - except - finally

可以在try-except语句中添加一个可选的finally语句块,用于定义一定会执行的代码块。不管有没有异常发生,finally语句块中的代码都会执行。finally语句块通常用于资源的释放和清理操作,例如关闭文件、释放网络连接等。

try:
   # 可能引发异常的代码
except ExceptionType:
   # 处理异常的逻辑
finally:
   # 一定会执行的代码

3 异常类型

异常类型说明
Exception所有异常的基类
SyntaxError语法错误,通常是由于代码书写不符合语法规则造成的
IndentationError缩进错误,通常是由于缩进不正确造成的
NameError名称错误,通常是在代码中使用了一个未定义的变量或函数名
TypeError类型错误,通常是在进行不兼容类型的操作时引发的
ValueError值错误,通常是在逻辑上不合理或无效的值被传递时引发的
IndexError索引错误,通常是在尝试访问列表、元组、字符串等类型时索引超出范围
KeyError键错误,通常是在尝试访问字典中不存在的键时引发的
AttributeError属性错误,通常是在尝试访问对象不存在的属性时引发的
FileNotFoundError文件未找到错误,通常是在尝试打开或读取不存在的文件时引发的
IOError输入输出错误,通常是在进行文件操作时发生的错误
ZeroDivisionError除零错误,通常是在尝试进行除以零的运算时引发的
AssertionError断言错误,通常是在调用assert语句时条件为False时引发的
ImportError导入错误,通常是在导入模块或包时出现问题时引发的
OverflowError溢出错误,通常是由于数值超过其类型的范围导致的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值