Python3(25) 错误与异常

        在 Python 编程过程中,错误和异常是不可避免的情况。了解如何处理这些情况,不仅能让程序更加健壮,还能提升用户体验。这篇博客将通过丰富的代码示例,深入学习 Python3 中错误与异常相关知识,方便日后复习回顾。


一、错误类型概述

1.1 语法错误(SyntaxError)

        语法错误是最常见的错误类型,当代码不符合 Python 语法规则时就会出现。Python 解释器在编译代码时检测到这类错误,并且不会执行代码。例如:

# 缺少冒号,导致语法错误
if 5 > 3
    print("5大于3")

        运行上述代码,Python 解释器会提示SyntaxError: invalid syntax,并指出错误位置。修正方法是在if 5 > 3后添加冒号:

1.2 逻辑错误

        逻辑错误不会导致程序崩溃,但会使程序无法按预期运行。这类错误通常是由于代码逻辑设计不合理导致的。例如:

# 计算平均值时逻辑错误
nums = [1, 2, 3, 4, 5]
average = sum(nums) / len(nums) + 1  # 错误:不应该加1
print(average)

        上述代码计算平均值时多加了 1,导致结果错误。这种错误需要通过仔细检查代码逻辑来发现和修正。

1.3 运行时错误(异常)

        运行时错误在程序运行过程中发生,Python 将其称为异常。即使代码语法正确,也可能因为某些条件不满足而引发异常。例如:

# 除数为0,引发ZeroDivisionError异常
result = 10 / 0
print(result)

        运行上述代码会引发ZeroDivisionError: division by zero异常,因为 Python 不允许除数为 0。


二、常见异常类型

2.1 ZeroDivisionError

        如上述示例,当尝试除以 0 时会引发该异常。

try:
    num1 = 15
    num2 = 0
    result = num1 / num2
except ZeroDivisionError:
    print("不能除以0!")

2.2 NameError

        当引用一个未定义的变量时,会引发NameError。例如:

print(undefined_variable)  # 引发NameError

        修正方法是确保所有变量在使用前都已正确定义。

2.3 TypeError

        类型错误通常在对不兼容的数据类型执行操作时发生。例如:

text = "Hello"
result = text + 5  # 引发TypeError

        因为字符串和整数不能直接相加,正确的做法是将整数转换为字符串后再进行拼接:

text = "Hello"
result = text + str(5)
print(result)

2.4 IndexError

        当尝试访问列表、元组等序列中不存在的索引时,会引发IndexError。例如:

my_list = [1, 2, 3]
print(my_list[3])  # 引发IndexError

        列表索引从 0 开始,上述代码访问索引 3 超出了列表范围。

2.5 KeyError

        在字典中访问不存在的键时,会引发KeyError。例如:

my_dict = {'name': 'Alice', 'age': 30}
print(my_dict['city'])  # 引发KeyError

        修正方法是在访问键之前,先检查键是否存在:

my_dict = {'name': 'Alice', 'age': 30}
if 'city' in my_dict:
    print(my_dict['city'])
else:
    print("键不存在")

三、异常处理

3.1 try-except 语句

  try-except语句用于捕获和处理异常。基本语法如下:

try:
    # 可能会引发异常的代码
    num1 = 20
    num2 = 0
    result = num1 / num2
except ZeroDivisionError:
    # 捕获到异常后执行的代码
    print("除数不能为0")

        在try块中放置可能引发异常的代码,如果发生异常,程序会立即跳转到对应的except块执行。

3.2 捕获多个异常

        可以使用多个except子句捕获不同类型的异常:

try:
    my_list = [1, 2, 3]
    print(my_list[3])
    result = 10 / 0
except IndexError:
    print("索引超出范围")
except ZeroDivisionError:
    print("不能除以0")

3.3 except 子句省略异常类型

        如果省略except后的异常类型,将捕获所有类型的异常:

try:
    num = int("abc")  # 引发ValueError
except:
    print("发生了异常")

        但这种方式可能会隐藏一些不期望的异常,建议明确指定异常类型。

3.4 try-except-else 语句

  else子句在try块中没有引发异常时执行:

try:
    num1 = 10
    num2 = 2
    result = num1 / num2
except ZeroDivisionError:
    print("不能除以0")
else:
    print(f"结果是: {result}")

3.5 try-except-finally 语句

  finally子句无论是否发生异常都会执行,常用于释放资源等操作:

try:
    file = open("test.txt", "r")
    content = file.read()
except FileNotFoundError:
    print("文件不存在")
finally:
    if 'file' in locals():
        file.close()

        上述代码中,无论文件是否成功打开,finally块中的代码都会确保文件被关闭。


四、抛出异常

4.1 使用 raise 语句

  raise语句用于主动抛出异常,可以抛出内置异常或自定义异常。例如:

def check_age(age):
    if age < 0:
        raise ValueError("年龄不能为负数")
    return age

try:
    result = check_age(-5)
except ValueError as e:
    print(e)

        在check_age函数中,当传入的年龄为负数时,使用raise抛出ValueError异常。

4.2 自定义异常

        可以通过继承Exception类来创建自定义异常类:

class MyCustomError(Exception):
    pass

def custom_function():
    raise MyCustomError("这是一个自定义异常")

try:
    custom_function()
except MyCustomError as e:
    print(e)

        上述代码定义了一个MyCustomError自定义异常类,并在custom_function中抛出该异常。


五、总结

        Python3 中的错误和异常处理是编写健壮程序的重要环节。通过了解不同类型的错误和常见异常,掌握try-except等异常处理机制,以及学会主动抛出异常和自定义异常,可以有效避免程序崩溃,提高程序的稳定性和可靠性。在实际编程中,应养成良好的异常处理习惯,及时捕获和处理可能出现的异常情况。希望这篇博客能帮助你更好地复习和巩固 Python3 错误与异常相关知识,在编程实践中灵活运用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值