Python语法-异常捕获

Python异常捕获和java里的大同小异,也都是以try开始,但是python里的捕获用except,java里用的是catch,但是功能都一样都是出现异常进行捕获,那咱们就来看一下代码使用

首先看一下遇见异常不捕获异常的情况

print("test-------------------------1")
f= open("123.txt","r") # 发生运行异常不处理后续代码

print("test-------------------------2")

由于没有123.txt的文件,所以也无法读取到,程序会报找不到错误异常,后续的代码也不会执行

捕获异常,由于open是关于文件的操作,所以捕获IO异常

# 捕获异常
try:
    print("test-------------------------1")
    f= open("123.txt","r")
    print("test-------------------------2")
except IOError:  #文件没找到就是Io异常(输入输出异常)
    pass

 当出现错误时则进入捕获块,也就是except,我们又编写了pass就是过,所以没有打印异常则会出现如下图所示情况

 

 打印异常,此处没有定义变量名称,所以是NameError

# 捕获相同的异常
try:
    print(num)
except NameError:
    print("发生错误了")

你大概也能猜出会是如下图片错误。

 

 可捕获多个异常,并打印异常结果:多个异常用括号扩起,并用逗号分隔

try:
    print("test-------------------------1")
    f = open("123.txt", "r")  # 捕捉到这里有异常就不往下走了
    print("test-------------------------2")
    print(num)
except (NameError,IOError) as result:  # 多个异常用逗号分割,并加()
                                       # as result 则是真正的异常结果
    print("发生错误了")
    print(result)

 打印捕获的异常结果

 所有的异常都会被捕获,而不只是捕获一种,只要出现需要捕获的异常,都要捕获则使用Exception

try:
    print("test-------------------------1")
    f = open("file.txt", "r")  # 捕捉到这里有异常就不往下走了
    print("test-------------------------2")
    print(num)
except Exception as result:  # Exception所有的异常错误
                                       # as result 则是真正的异常结果
    print("发生错误了")
    print(result)

会抛出一样的异常。

 嵌套异常使用,像如下,没打开文件就出现异常则直接捕获打印,如果打开文件以后进行读取异常或其他异常,则进行捕获也要走最终关闭文件。

# try catch 嵌套
try:
    f=open("file.txt","r")
    try:
        while True:
            content=f.readline()
            if len(content)==0:
                break
            time.sleep(2)
            print(content)
    finally:
        f.close()
        print("文件关闭")
except Exception as result:
    print(result)

打开文件报错情况

 当文件打开以后执行后续代码出现问题,则文件关闭然后抛出异常,嵌套异常可针对不同模块进行有针对的抛出异常处理连接问题。

 

 课堂练习:

1.通过python新建文件gushi.txt,并写入一首古诗,考虑异常!

2.读取文件gushi.txt,将内容复制到copy.txt中,并在控制台输出复制完成,需要考虑异常!

ps:python的文件操作上节就是哦!

 

Python 中,`try-except` 是一种常用的异常处理机制,用于捕获并处理程序运行时可能发生的错误,从而避免程序崩溃。其基本语法结构如下: ```python try: # 可能引发异常的代码块 except 异常类型 as e: # 处理异常的代码块 ``` ### 异常处理流程 当程序进入 `try` 块时,会尝试执行其中的代码。如果在执行过程中发生异常,程序会立即跳转到与该异常匹配的 `except` 块,并由该块处理异常。如果未发生异常,则 `except` 块不会执行,程序继续往下运行[^1]。 例如: ```python try: x = 10 / 0 except ZeroDivisionError: print("除数不能为零") ``` 在这个例子中,由于除以零会引发 `ZeroDivisionError`,程序会跳转到对应的 `except` 块并输出提示信息。 ### 多个异常捕获 可以在一个 `try` 块中捕获多种不同类型的异常,并通过多个 `except` 块分别处理。例如: ```python def divide(num1, num2): try: return num1 / num2 except ZeroDivisionError: return '除数不能为0' except TypeError: return '输入数据类型不正确' ``` 也可以在一个 `except` 块中捕获多个异常类型,使用元组来指定多个异常: ```python try: result = 1 / 0 except (ZeroDivisionError, TypeError): print("捕获到除零或类型错误") ``` 还可以使用 `Exception` 来捕获所有异常,但这通常只在特殊情况下使用,因为这会掩盖所有错误,包括那些未预料到的异常[^4]。 ### else 和 finally 的使用 - `else` 块用于在没有异常发生时执行特定代码。 - `finally` 块用于无论是否发生异常都执行的代码,通常用于资源清理。 ```python try: x = 10 / 2 except ZeroDivisionError: print("除零错误!") else: print("计算成功,结果为:", x) finally: print("无论如何都会执行的代码") ``` ### 抛出异常(raise) 除了捕获异常,还可以通过 `raise` 主动抛出异常。例如,定义一个自定义异常类并抛出它: ```python class MyCustomError(Exception): pass try: raise MyCustomError("这是一个自定义异常") except MyCustomError as e: print("捕获自定义异常:", e) ``` ### 示例:完整的异常处理函数 ```python def divide(num1, num2): try: return num1 / num2 except ZeroDivisionError: return '除数不能为0' except TypeError: return '输入数据类型不正确' except: return '发生未知错误' else: print("计算成功") finally: print("执行完毕") print(divide(4, 2)) print("运算结束") ``` ### 异常处理的最佳实践 - **避免空的 except 块**:空的 `except` 块会掩盖所有错误,不利于调试。 - **具体异常优先**:尽量捕获具体的异常类型,而不是使用 `Exception`。 - **合理使用 finally**:用于关闭文件、网络连接等资源释放操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值