【Python基础】try 异常处理

部署运行你感兴趣的模型镜像

异常

程序遇到严重错误时, 会终止程序的运行并抛出异常

def my_sub(a, b):
    return a / b

my_sub(1, 0)

捕获异常

try:
	表达式
except [Exception] as e:
	表达式
finnaly:
	表达式



def my_sub(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        # print(e)
        print("分母不可为0")
        return None
    finally:
        print("function my_sub end")

my_sub(1, 0)

Exception

所有异常的基类, 所有的异常都是Exception的子类

处理异常颗粒度要细一点, 尽量不要捕获基类Exception, 尤其是数据处理的时候.

常见的异常

  • IndexError   索引值超过了列表长度
>>> l = [1]
>>> l[2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range
  • KeyError  找不到Key
>>> d = {"a": 1}
>>> d["b"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'b'
  • ValueError  传入的参数错误
>>> int('a1')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'a1'
  • TypeError  类型错误, 常见于运算
>>> 1 + '2'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
  • SyntaxError  语法报错, 检查自己的语法有没有写错

  • IndentationError

    缩进错误

    • 混用tab和space(空格)

    • 缩进长度不对


如何处理异常

  • 抛出新异常

def my_sub(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        print("分母不可为0")
        raise Exception("params error")
    finally:
        print("function my_sub end")
  • 重新抛出

def my_sub(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        print("分母不可为0")
        raise ZeroDivisionError
    finally:
        print("function my_sub end")
  • 忽略(不推荐)

pass

用来指示当前处理语句没有正式写完, 尽量不要忽略异常, 否则代码的健壮度会很差, 造成不可预知的bug.

自定义异常

class ParamsError(Exception):
    pass
    
def my_sub(a, b):
    try:
        return a / b
    except ZeroDivisionError:
        raise ParamsError("分母不可以为0")
    finally:
        print("function my_sub end")  

Everything is going smoothly.

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

Python3.9

Python3.9

Conda
Python

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

<think>好的,我现在需要回答用户关于Pythontry-except异常处理的使用指南的问题。首先,我得回忆一下自己了解的异常处理知识,并确保信息准确。用户提供的引用内容里有提到嵌套的try语句和重新引发异常,这可能是一个重点。 首先,我应该从基础开始,解释什么是异常处理,为什么需要它。然后,介绍基本的try-except语法结构,包括如何处理多个异常,以及else和finally子句的作用。接着,可能需要提到异常对象和如何获取异常信息,比如使用as关键字。 用户提供的示例中有嵌套的try-except块,并且使用了raise重新引发异常。这部分需要详细说明,可能还要解释异常传播的过程。此外,用户引用中提到了在except块中再使用try语句处理嵌套异常,这说明用户可能对复杂场景下的异常处理感兴趣,需要覆盖这些高级用法。 还要注意引用用户提供的参考资料,正确标注引用标记。比如在提到重新引发异常时,引用[^1],或者在讨论嵌套异常处理时引用相关部分。需要确保每个引用都自然衔接,符合用户的要求。 接下来,我需要组织内容结构。可能分为几个部分:基本语法、捕获特定异常、处理多个异常、获取异常信息、else和finally的用途、嵌套异常处理、重新引发异常、自定义异常等。每个部分都需要简明扼要,给出示例代码,并确保代码语法正确,符合LaTeX格式要求,比如变量用$...$包裹。 需要检查是否有遗漏的重要点,比如异常类的继承结构,或者常见的异常类型,如ZeroDivisionError、ValueError等。同时,用户可能想知道最佳实践,比如避免捕获过于宽泛的异常,或者如何记录异常信息。 另外,用户要求生成相关问题,这部分需要根据内容提出相关问题,比如异常处理的最佳实践,finally和else的区别,自定义异常的方法等。问题要具体,能够引导用户进一步学习。 最后,确保整个回答用中文,结构清晰,步骤明确,符合用户给出的系统级指令,比如正确使用LaTeX格式,引用标识的位置正确,代码块用正确的格式包裹,没有使用markdown,而是自然分段。同时,回答要真实可靠,参考提供的引用资料,避免错误信息。</think>### Pythontry-except异常处理使用指南 #### 1. **基本语法与作用** Python的`try-except`语句用于捕获和处理代码执行时的异常,防止程序意外终止。其基本结构如下: ```python try: # 可能引发异常的代码 except 异常类型: # 异常处理逻辑 ``` 例如: ```python try: result = 10 / 0 except ZeroDivisionError: print("错误:除数不能为零") ``` 此代码会捕获除以零的异常,并输出提示信息[^2]。 --- #### 2. **捕获特定异常** 可指定具体异常类型进行针对性处理: ```python try: num = int("abc") # 可能引发 ValueError except ValueError: print("输入值无法转换为整数") ``` --- #### 3. **处理多个异常** - **方式一**:使用多个`except`块 ```python try: file = open("data.txt", "r") except FileNotFoundError: print("文件不存在") except PermissionError: print("无权限访问文件") ``` - **方式二**:用元组合并异常类型 ```python try: data = [1, 2, 3] print(data[5]) except (IndexError, KeyError): print("索引或键错误") ``` --- #### 4. **获取异常对象** 通过`as`关键字获取异常详细信息: ```python try: print(10 / 0) except ZeroDivisionError as e: print(f"错误信息:{e}") # 输出:division by zero ``` --- #### 5. **else与finally子句** - **`else`**:当无异常时执行 ```python try: result = 10 / 2 except ZeroDivisionError: print("错误") else: print(f"结果为:{result}") # 输出:5.0 ``` - **`finally`**:无论是否异常都会执行 ```python try: file = open("data.txt", "r") finally: file.close() # 确保资源释放 ``` --- #### 6. **嵌套异常处理** 在`except`块内部可嵌套`try-except`,处理复杂逻辑: ```python try: try: result = 10 / 0 except ZeroDivisionError: print("内部处理:除数不能为零") raise # 重新引发异常,传递到外层[^1] except ZeroDivisionError: print("外部处理:捕获到异常") ``` --- #### 7. **重新引发异常(raise)** 通过`raise`关键字将异常传递给上层调用者: ```python try: result = 10 / 0 except ZeroDivisionError: print("记录错误日志") raise # 重新抛出异常 ``` --- #### 8. **自定义异常** 通过继承`Exception`类创建自定义异常: ```python class CustomError(Exception): pass try: raise CustomError("自定义错误") except CustomError as e: print(e) # 输出:自定义错误 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值