Python中try语句的用法

本文介绍了Python中try-except语句的基本用法,包括如何捕获特定类型的异常、输出异常信息及处理多个异常情况。同时,还讲解了try-finally语句的作用,并展示了如何使用raise语句主动引发异常。
部署运行你感兴趣的模型镜像
1. try except语句的用法,用来检测一段代码内出现的异常并将其归类输出相关信息,首先是try: 被检测代码段  except Exception[as reason]: 相关信息,举例说明:
>>> try:
    f = open('该文档不存在')
    print(f.read())
    f.close()
except OSError:
    print('文件出错了T_T')    

文件出错了T_T
        当然,我们也可以在except Exception 加上 as reason将程序检测到的出错的信息输出,举例说明:
try:
    f = open('该文档不存在')
    print(f.read())
    f.close()
except OSError as reason:
    print('文件出错了T_T')
    print('出错原因是%s'%str(reason))

文件出错了T_T
出错原因是[Errno 2] No such file or directory: '该文档不存在'
        当然,可以增加多个except语句,提取代码段不同的异常问题,举例说明:
try:
    1 + '1'
    f = open('该文档不存在')
    print(f.read())
    f.close()
except OSError as reason:
    print('文件出错了T_T')
    print('出错原因是%s'%str(reason))
except TypeError as reason:
    print('求和出错了T_T')
    print('出错原因是%s'%str(reason))

求和出错了T_T
出错原因是unsupported operand type(s) for +: 'int' and 'str'
        但是需要注意程序检测到第一个异常后即停止运行,在except中找到相应输出语句,如果except未包含时,则直接曝出异常,
try:
    fishc
    1 + '1'
    f = open('该文档不存在')
    print(f.read())
    f.close()
except OSError as reason:
    print('文件出错了T_T')
    print('出错原因是%s'%str(reason))
except TypeError as reason:
    print('求和出错了T_T')
    print('出错原因是%s'%str(reason))

Traceback (most recent call last):
  File "D:/Python34/test/033/01.py", line 2, in <module>
    fishc
NameError: name 'fishc' is not defined

        另外,可以将Exception信息放在一个except语句下面,举例说明:
try:
    fishc
    1 + '1'
    f = open('该文档不存在')
    print(f.read())
    f.close()
except (OSError,TypeError,NameError) as reason:
    print('出错了T_T')
    print('出错原因是%s'%str(reason))
出错了T_T
出错原因是name 'fishc' is not defined
        甚至except语句连Except都不要了,则程序检测到异常就会执行except下的语句,但不推荐使用:
try:
    fishc
    1 + '1'
    f = open('该文档不存在')
    print(f.read())
    f.close()
except:
    print('出错了T_T')

出错了T_T

2. try finally语句,一般是在try except语句下面补充,用于程序检测到异常后仍能执行的语句:
try:
    fishc
    1 + '1'
    f = open('新文档.txt',wt)
except (OSError,TypeError,NameError) as reason:
    print('出错了T_T')
    print('出错原因是%s'%str(reason))
finally:
    f = open('新文档.txt','wt')
    f.write('我爱鱼C论坛!')
    f.close()
    f = open('新文档.txt','rt')
    print(f.read())
    f.close()

出错了T_T
出错原因是name 'fishc' is not defined
我爱鱼C论坛!
3. raise语句,raise Exception,引入一个异常,举例说明:
>>> raise NameError
Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    raise NameError
NameError

>>> raise ZeroDivisionError('除数是0')
Traceback (most recent call last):
  File "<pyshell#14>", line 1, in <module>
    raise ZeroDivisionError('除数是0')
ZeroDivisionError: 除数是0

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>我们正在讨论Python中的try语句和异常处理机制。根据用户要求,回答需要结构化、清晰,并包含代码示例。同时,根据系统指令,数学表达式需用$...$,独立公式用$$...$$,但本问题不涉及数学公式,因此主要关注代码和文本格式。根据引用内容,我们可以总结如下: 1. try-except是异常处理的基本结构,还可以有else和finally块。 2.执行流程:先执行try块,若出现异常则跳转到匹配的except块处理,否则执行else块(如果有),finally块无论是否异常都会执行。3.可以捕获特定异常,也可以捕获多个异常或所有异常(但不推荐捕获所有异常)。 回答结构:1.介绍try语句的作用和基本结构。2.详细解释每个部分(try,except,else,finally)的功能和用法。3.提供代码示例。 4.讨论异常处理的最佳实践(如避免捕获所有异常,使用finally进行清理等)。5.生成相关问题。注意:引用内容已经给出,我们需要在适当的地方引用(在引用内容的末尾添加[^数字])。但是,由于用户要求生成相关问题,我们将在最后生成相关问题。由于用户要求使用中文,且回答中引用的段落末尾自然地添加引用标识,我们将根据引用内容进行标注。开始回答:</think>### Python try语句用法及异常处理详解 Python的`try`语句是异常处理的核心机制,用于捕获并处理运行时错误,避免程序意外终止。其基本结构包括`try`、`except`、`else`和`finally`四个关键块,语法如下: ```python try: # 可能引发异常的代码 except [异常类型]: # 异常处理代码 else: # 无异常时执行的代码 finally: # 无论是否异常都会执行的代码 ``` #### 一、核心组件详解 1. **`try`块** 包含可能引发异常的代码。执行时若出现异常,Python会立即终止当前块并跳转至匹配的`except`块[^2]。 ```python try: result = 10 / int(input("输入数字: ")) # 可能触发ValueError/ZeroDivisionError ``` 2. **`except`块** - 捕获特定异常:可指定异常类型(如`ValueError`) - 捕获多个异常:使用元组`(TypeError, FileNotFoundError)` - 捕获所有异常:不推荐(会掩盖潜在错误)[^3] ```python except ValueError: # 处理无效输入 print("必须输入数字!") except ZeroDivisionError: # 处理除零错误 print("除数不能为零!") except Exception as e: # 捕获其他异常 print(f"未知错误: {e}") ``` 3. **`else`块** 仅在`try`块**无异常**时执行,适合放置依赖`try`块成功的代码[^3]: ```python else: print(f"计算结果: {result}") # 仅当无异常时输出 ``` 4. **`finally`块** **始终执行**,用于资源清理(如关闭文件/数据库连接)[^4]: ```python finally: print("执行结束") # 无论是否异常都会执行 ``` #### 二、完整执行流程 1. 执行`try`块代码 2. 若发生异常 → 匹配并执行`except`块 3. 若无异常 → 执行`else`块 4. **必定执行**`finally`块(即使有`return`)[^2] #### 三、关键实践技巧 1. **精确捕获异常** 避免空`except:`,优先捕获具体异常类型: ```python # 不推荐 except: pass # 推荐 except (FileNotFoundError, PermissionError) as e: logging.error(f"文件操作失败: {e}") ``` 2. **异常对象操作** 通过`as`获取异常详情: ```python except ValueError as ve: print(f"错误详情: {ve.args[0]}") ``` 3. **资源管理范式** 使用`finally`确保资源释放: ```python file = None try: file = open("data.txt", "r") # 文件操作... except IOError: print("文件读写错误") finally: if file: file.close() # 确保文件关闭 ``` #### 四、完整示例 ```python def read_file(filename): try: with open(filename, 'r') as f: # 使用with自动管理资源 data = f.read() num = int(data) # 可能触发ValueError except FileNotFoundError: print(f"错误: 文件{filename}不存在") except ValueError: print("错误: 文件内容非数字") else: print(f"读取成功! 数值: {num}") finally: print("处理流程结束") read_file("data.txt") ``` #### 五、异常处理原则 1. **异常用于错误处理**:不要用异常控制正常流程(如用`if`检查文件存在性优于捕获`FileNotFoundError`) 2. **日志记录**:关键异常需记录日志而非仅打印 3. **异常传递**:低层模块捕获后,可向高层重新抛出(`raise`) > 通过合理使用异常处理,可使程序具备更强的健壮性。例如在读取用户输入时,通过`try-except`能有效避免无效输入导致的崩溃[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值