Python tryexcept案例如何捕获异常

wen python案例 35

本文目录导读:

Python tryexcept案例如何捕获异常

  1. 基础异常捕获
  2. 捕获多个异常
  3. 使用else和finally
  4. 获取异常信息
  5. 自定义异常
  6. 实际应用案例
  7. 文件操作异常处理
  8. 异常捕获最佳实践

我来给你展示Python中try-except捕获异常的常用案例:

基础异常捕获

# 基础用法
try:
    number = int(input("请输入一个数字: "))
    result = 10 / number
    print(f"10 ÷ {number} = {result}")
except ValueError:
    print("错误:请输入有效的数字!")
except ZeroDivisionError:
    print("错误:除数不能为0!")

捕获多个异常

# 捕获多种异常类型
try:
    data = [1, 2, 3]
    index = int(input("请输入索引: "))
    print(f"元素值为: {data[index]}")
except (ValueError, IndexError) as e:
    print(f"发生错误: {e}")

使用else和finally

# else - 没有异常时执行
# finally - 无论是否异常都执行
try:
    file = open("test.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("文件不存在!")
else:
    print("文件读取成功")
    print(content)
finally:
    print("程序执行完毕")
    if 'file' in locals():
        file.close()

获取异常信息

# 获取异常详细信息
try:
    x = 1 / 0
except Exception as e:
    print(f"异常类型: {type(e).__name__}")
    print(f"异常信息: {str(e)}")
    print(f"详细描述: {repr(e)}")

自定义异常

# 自定义异常类
class CustomError(Exception):
    def __init__(self, message):
        self.message = message
        super().__init__(self.message)
try:
    age = int(input("请输入年龄: "))
    if age < 0 or age > 150:
        raise CustomError("年龄超出有效范围!")
    print(f"年龄: {age}")
except CustomError as e:
    print(f"自定义错误: {e}")
except ValueError:
    print("请输入有效的数字!")

实际应用案例

def safe_divide():
    """安全的除法运算"""
    try:
        a = float(input("被除数: "))
        b = float(input("除数: "))
        result = a / b
    except ValueError:
        print("❌ 输入必须是数字!")
        return None
    except ZeroDivisionError:
        print("❌ 除数不能为0!")
        return None
    except Exception as e:
        print(f"❌ 未知错误: {e}")
        return None
    else:
        print(f"✅ 计算结果: {result}")
        return result
    finally:
        print("--- 本次运算结束 ---")
# 调用函数
safe_divide()

文件操作异常处理

def read_config(filename):
    """读取配置文件"""
    try:
        with open(filename, 'r', encoding='utf-8') as f:
            config = f.read()
            return config
    except FileNotFoundError:
        print(f"❌ 配置文件 {filename} 不存在")
        return None
    except PermissionError:
        print(f"❌ 没有权限读取文件 {filename}")
        return None
    except UnicodeDecodeError:
        print(f"❌ 文件编码格式不正确")
        return None
    except Exception as e:
        print(f"❌ 读取文件时发生错误: {e}")
        return None
# 测试
config = read_config("config.txt")

异常捕获最佳实践

# ✅ 好的做法:具体异常类型
try:
    # 代码
    pass
except ValueError:
    # 处理特定异常
    pass
# ❌ 不好的做法:捕获所有异常
try:
    # 代码
    pass
except:  # 不推荐
    # 隐藏了所有错误
    pass
# ✅ 更好的做法:记录日志
import logging
try:
    # 可能出错的代码
    pass
except Exception as e:
    logging.error(f"发生错误: {e}", exc_info=True)
    # 或者重新抛出
    raise

这些案例涵盖了Python异常处理的主要场景,根据具体需求选择合适的方式即可。

抱歉,评论功能暂时关闭!