【Python基础】Python错误和异常处理(详细实例)

本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢!

文章目录

一、前言

​ 在Python编程中,错误和异常处理是保证程序健壮性和稳定性的重要组成部分。Python提供了强大的异常处理机制,使开发者能够优雅地处理程序执行过程中可能出现的各种错误和异常情况。

本文将深入探讨Python中的错误类型、异常处理机制以及相关的最佳实践。

  • 什么是Python?

    Python是由荷兰人吉多·范罗苏姆于1990年初设计的一门高级编程语言,该语言应用领域非常广泛,尤其在数据科学、人工智能、游戏开发等领域,它已经成为最受欢迎的程序设计语言之一,非常适合新手学习。

    Python语言标准库官方使用手册:https://docs.python.org/zh-cn/3/library/turtle.html#turtle-methods

  • Python语言有哪些特点?

    1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。

    2.易于阅读:Python代码定义的更清晰。

    3.易于维护:Python的成功在于它的源代码是相当容易维护的。

    4.丰富的库:Python的最大的优势之一具有丰富的标准库,并且跨平台的,在UNIX,Windows和Mac兼容很好。

    5.面向对象:Python支持面向对象编程,在"面向对象"的语言中,程序是由数据和功能组合而成的对象构建起来的。

    6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。

    7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。

    8.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。

二、Python中的错误类型

Python中的错误通常分为两类:语法错误和异常。

  • 语法错误(SyntaxError):这类错误发生在代码解析阶段,通常是由于代码书写不规范导致的。例如,括号不匹配、缺少冒号等。

例如:

python 复制代码
print("Hello, world!)

上述代码会引发一个SyntaxError: EOL while scanning string literal,因为字符串没有正确关闭。

异常信息如下图:

  • 异常:异常是在程序运行过程中发生的错误情况。

Python内置了许多异常类型,用于表示不同类型的错误。

常见的异常类型包括:

  • NameError:尝试访问未定义的变量或函数时引发。

    例如:

    python 复制代码
    print(message)
    
    # 这段代码会产生一个NameError: name 'message' is not defined,因为message变量没有被定义。

异常信息如下图:

  • TypeError:使用不兼容的类型进行操作时引发。

    例如:

    python 复制代码
    age = 25
    print("Your age is " + age + " years old.")
    # 这里会抛出一个TypeError: can only concatenate str (not "int") to str,因为不能将字符串和整数直接连接。需要将整数转换为字符串。

异常信息如下图:

  • ZeroDivisionError:尝试除以零时引发。

    例如:

    python 复制代码
    result = 10 / 0
    
    # 这段代码会引发一个ZeroDivisionError: division by zero。

异常信息如下图:

  • FileNotFoundError:尝试打开不存在的文件时引发。

    例如:

    python 复制代码
    file = open("nonexistent.txt", "r")
    
    # 上述代码会产生一个FileNotFoundError: [Errno 2] No such file or directory: 'nonexistent.txt'。

异常信息如下图:

  • IndexError:尝试访问列表或序列中不存在的索引时引发。

    例如:

    python 复制代码
    my_list = [1, 2, 3]
    print(my_list[5])
    
    # 上述代码会引发一个IndexError: list index out of range,因为列表my_list中没有索引为5的元素。

    异常信息如下图:

除了内置异常,开发者还可以自定义异常类型来表示特定的错误情况。

例如,定义了一个名为InvalidAgeError的自定义异常类,用于处理年龄为负值的情况。如下:

python 复制代码
# 自定义异常类
class InvalidAgeError(Exception):
    pass

# 使用自定义异常
try:
    age = int(input("Enter your age: "))
    if age < 0:
        raise InvalidAgeError("Age cannot be negative.")
except InvalidAgeError as e:
    print(e)
    
# 当输入负数比如-1时,会返回自定义异常信息"Age cannot be negative."    
    

异常信息如下图:

三、Python异常处理机制

Python提供了几种处理异常的方式,其中最常用的是try-except语句。

3.1 try-except语句

try-except语句用于捕获并处理异常。

其基本语法如下:

python 复制代码
try:

    # 可能触发异常的代码
except ExceptionType:

    # 处理异常的代码

当try子句中的代码触发异常时,程序将跳转到与该异常类型匹配的except子句,并执行相应的处理代码。

如果try子句中的代码没有触发异常,except子句将被忽略。

一个try语句可以有多个except子句,用于处理不同类型的异常。此外,还可以使用一个不带异常类型的except子句来捕获所有异常,但这通常不推荐,因为它会隐藏程序中的逻辑错误。

其基本语法如下:

python 复制代码
try:
    # 可能触发异常的代码
except ValueError:
    # 处理ValueError异常的代码
except ZeroDivisionError:
    # 处理ZeroDivisionError异常的代码
except Exception as e:
    # 处理其他所有异常的代码
    print("An error occurred:", e)
3.2 try-except-else语句

try-except语句还可以包含一个else子句,用于在try子句中的代码没有触发异常时执行。

其基本语法如下:

python 复制代码
try:
    # 可能触发异常的代码
except ExceptionType:
    # 处理异常的代码
else:
    # 如果没有异常发生,执行这里的代码
    print("Everything went fine")
3.3 try-finally语句

try-finally语句用于确保无论是否发生异常,某些代码都会被执行,例如释放资源或关闭文件等。

其基本语法如下:

python 复制代码
try:
    # 可能触发异常的代码
except ExceptionType:
    # 处理异常的代码
finally:
    # 无论是否发生异常,都会执行的代码
	print("This code will always run")

四、其他异常处理工具

4.1 raise语句

raise语句用于手动触发一个异常。这在编写自定义异常或需要在特定条件下终止程序时非常有用。

例如:

python 复制代码
def check_positive(value):
    if value <= 0:
        raise ValueError("Value must be positive")
    return value
    
check_positive(-1)

# 上述代码会引发ValueError: Value must be positive

异常信息如下图:

4.2 assert语句

assert语句用于在程序中插入断言,即在某些条件必须为真的情况下进行检查。如果条件为假,assert语句将触发AssertionError异常。

例如:

python 复制代码
x = -5
assert x > 0, "x must be greater than zero"

# 上述代码会引发AssertionError: x must be greater than zero

异常信息如下图:

五、总结

Python中的错误和异常处理是编写健壮和稳定程序的关键部分。通过使用try-except、try-finally、raise和assert等语句,开发者可以有效地捕获和处理程序执行过程中可能出现的各种错误和异常情况。这不仅提高了程序的可靠性,还增强了代码的可读性和可维护性。

如果您对文章中内容有疑问,欢迎在评论区进行留言,我会尽量抽时间给您回复。如果文章对您有帮助,欢迎点赞、收藏。您的点赞,是对我最大的支持和鼓励,谢谢 :-)

相关推荐
轻口味2 分钟前
命名空间与模块化概述
开发语言·前端·javascript
晓纪同学1 小时前
QT-简单视觉框架代码
开发语言·qt
威桑1 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服1 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
开发语言·青少年编程·编程与数学·goweb
Java Fans1 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手1 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
算法小白(真小白)1 小时前
低代码软件搭建自学第二天——构建拖拽功能
python·低代码·pyqt
唐小旭2 小时前
服务器建立-错误:pyenv环境建立后python版本不对
运维·服务器·python