当前位置: 首页 > news >正文

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

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

文章目录

    • 一、前言
    • 二、Python中的错误类型
    • 三、Python异常处理机制
        • 3.1 try-except语句
        • 3.2 try-except-else语句
        • 3.3 try-finally语句
    • 四、其他异常处理工具
        • 4.1 raise语句
        • 4.2 assert语句
    • 五、总结

一、前言

​ 在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):这类错误发生在代码解析阶段,通常是由于代码书写不规范导致的。例如,括号不匹配、缺少冒号等。

例如:

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

异常信息如下图:
在这里插入图片描述

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

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

常见的异常类型包括:

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

    例如:

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

异常信息如下图:
在这里插入图片描述

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

    例如:

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

异常信息如下图:
在这里插入图片描述

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

    例如:

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

异常信息如下图:
在这里插入图片描述

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

    例如:

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

异常信息如下图:
在这里插入图片描述

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

    例如:

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

    异常信息如下图:
    在这里插入图片描述

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

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

# 自定义异常类
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语句用于捕获并处理异常。

其基本语法如下:

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

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

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

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

其基本语法如下:

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子句中的代码没有触发异常时执行。

其基本语法如下:

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

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

其基本语法如下:

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

四、其他异常处理工具

4.1 raise语句

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

例如:

def check_positive(value):if value <= 0:raise ValueError("Value must be positive")return valuecheck_positive(-1)# 上述代码会引发ValueError: Value must be positive

异常信息如下图:
在这里插入图片描述

4.2 assert语句

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

例如:

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等语句,开发者可以有效地捕获和处理程序执行过程中可能出现的各种错误和异常情况。这不仅提高了程序的可靠性,还增强了代码的可读性和可维护性。

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux s3c2440 开发板上的操作系统实现 ubuntu
  • 前端的面试题
  • vue3+ant design vue动态实现级联菜单~
  • 动态规划算法:05.路径问题_不同路径_C++
  • 通信工程学习:什么是接入网(AN)中的CF核心功能
  • Linux 工程师:探索开源世界的专业之路
  • JVM锁的优化与逃逸分析
  • ESP8266+httpServer+GET+POST实现网页验证密码
  • element表格合并列数据相同合并单元格
  • Tuxera NTFS for Mac 2023绿色版
  • 应急响应靶场》》第一章 应急响应-Linux日志分析
  • Docker基础命令汇总,小白必备
  • 漫画元素检测系统源码分享
  • 二十三种设计模式之原型模式
  • ZooKeeper--分布式协调服务
  • 【译】JS基础算法脚本:字符串结尾
  • $translatePartialLoader加载失败及解决方式
  • axios 和 cookie 的那些事
  • ES6简单总结(搭配简单的讲解和小案例)
  • fetch 从初识到应用
  • Fundebug计费标准解释:事件数是如何定义的?
  • Java读取Properties文件的六种方法
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • MySQL-事务管理(基础)
  • rc-form之最单纯情况
  • spring学习第二天
  • Sublime text 3 3103 注册码
  • windows下如何用phpstorm同步测试服务器
  • Xmanager 远程桌面 CentOS 7
  • Zepto.js源码学习之二
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 后端_ThinkPHP5
  • 如何利用MongoDB打造TOP榜小程序
  • 手机端车牌号码键盘的vue组件
  • 译自由幺半群
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​zookeeper集群配置与启动
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • # .NET Framework中使用命名管道进行进程间通信
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • (13)Hive调优——动态分区导致的小文件问题
  • (2)(2.10) LTM telemetry
  • (4)logging(日志模块)
  • (ibm)Java 语言的 XPath API
  • (分享)自己整理的一些简单awk实用语句
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (四)Android布局类型(线性布局LinearLayout)
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)我也是一只IT小小鸟