目录
先决条件
目标
解释错误和异常
错误
IndentationError
异常
内置异常
ValueError
TypeError
IndexError
KeyError
自定义异常
处理异常
使用 try-except 语句
使用一个 except 语句处理多个异常类
通配符异常类
使用 finally 语句
创建自定义异常类
首页 后端开发 Python教程 Python 中的错误处理:最佳实践。探索如何有效处理异常

Python 中的错误处理:最佳实践。探索如何有效处理异常

Jan 12, 2025 pm 10:09 PM

Error Handling in Python: Best Practices. Explore how to handle exceptions effectively

摘要:

程序错误是不可恢复的;当程序遇到错误时,它会立即退出或崩溃。

优秀的程序员会确保他们的代码或软件能够优雅地处理软件使用过程中可能出现的错误/异常,而不会崩溃或产生不良结果。想象一下,为金融机构编写仅接受数字输入的软件,如果用户输入了字母而不是数字进行算术运算,这通常会引发错误,并且软件会因为一个用户而崩溃,如果没有任何适当的机制来处理错误的话。这绝对不是一件好事——它对业务不利,可能导致客户感到沮丧,而且有人可能会因为不称职而丢掉工作。

在本文中,我们将学习如何以最佳方式处理代码中由于用户交互而可能出现的错误。敬请关注。

先决条件

本文适合:

  • 寻求学习如何在代码中处理异常的 Python 软件开发人员。
  • 已经熟悉 Python 并希望学习 Python 中错误处理概念的人员。
  • 寻求提高 Python 错误处理知识的现有专业人士。

目标

通读本文后,读者应该能够:

  • 清晰地理解 Python 中错误处理的概念及其重要性。
  • 了解自定义异常类以及如何实现它们。
  • 理解 Python 中错误和异常之间的关键区别。

解释错误和异常

错误异常通常可以互换使用,但它们在技术上含义不同。在 Python 中,错误异常都是BaseException的子类,这进一步表明它们即使不同,也有一些共同点。

错误

错误是不可恢复的;当我们的程序遇到错误时,它会立即退出或崩溃。即使您可能预料到错误,也没有办法以编程方式处理错误。下面列出了一些错误:

SyntaxError

这是程序员面临的最常见错误类型之一,它发生在代码不遵循正确的 Python 语法时,并且可以在解析期间检测到。对于学习者或从其他编程语言转向 Python 的人来说,这是一个很容易出现的问题。

name = “Austin”;
print(name)
登录后复制
登录后复制
登录后复制

这会导致 SyntaxError,因为在 Python 中,语句不会以分号结尾。

IndentationError

当 Python 代码缩进不正确时,就会发生此错误,并在解析代码时检测到。Python 中的缩进非常重要。它是 Python 中唯一可以定义代码块的方式,这与大多数使用花括号的语言不同。

name = “Austin”;
print(name)
登录后复制
登录后复制
登录后复制

这段代码会因为缩进不当而导致错误。它应该是:

active = True
if (active):
print(“The user is active”)
登录后复制
登录后复制

异常

Python 中的异常在运行时发生。与错误不同,可以以编程方式正确地处理或捕获它们,以便我们的程序可以继续运行而不会崩溃。换句话说,它们是可恢复的。以下是 Python 中一些常见的异常:

内置异常

这些类型的异常是 Python 编程语言的一部分。下面列出其中一些:

ValueError

当向函数传递无效参数时发生此错误,即使类型可能正确。

if (active):
    print(“The user is active”)
登录后复制
登录后复制

从上面的代码片段中,如果我们向函数传递数字字符串,它将成功转换为数字,否则,它将产生 ValueError

def str_num(num_string):
    return(int(string))
登录后复制
登录后复制

TypeError

当向函数传递不合适的类型参数时,就会引发此错误。

print(str_num(“123”)) #works perfectly
print(str_num(“abc”)) #raises a ValueError
登录后复制
登录后复制

这会引发 TypeError

IndexError

当您尝试使用错误索引访问列表中的值时,就会出现此错误。

def addition(num1, num2):
    return num1 + num2
# calling the function
addition(5, A)
登录后复制

这会导致 IndexError,因为 my_list[2] 无法访问。

KeyError

当尝试使用错误或不存在的键访问字典中的值时,就会引发此错误。

my_list = [“dog”, “cat”]
my_list[2]
登录后复制

这会引发 KeyError。 您可以在此处找到其他内置异常。

自定义异常

自定义异常由程序员定义。在这里,Python 使程序员能够手动定义程序应该在执行期间检查的条件,并在找到时引发异常。您可以通过创建一个从 Exception 类继承的类来实现这一点。

处理异常

处理异常可确保我们的软件应用程序在遇到应用程序生命周期中出现的某些错误时具有可预测的性能。在本节中,您将学习如何在编程中实现这一点。

使用 try-except 语句

try-except 语句提供了一种安全的方法来处理可能引发错误或异常的代码。try 语句包装有问题的代码或 try 子句;这是很可能导致整个程序出错的代码部分;当从用户那里接收输入、从文件读取时,这很可能会发生,仅举几例。

except 语句标志着 except 子句的开始;这是包装在 except 块中的其余代码。except 子句处理 try 块中引发的异常。

让我带您了解执行工作流程。您的 Python 程序通常会执行,直到它到达包含“有问题的”代码的 try 块,如果当时在 try 块中执行代码时没有可能的错误,它会跳过 except 块并继续执行代码库的其余部分。但是,如果在 try 块中执行代码时遇到错误,则会在创建异常对象后,控制立即跳转到 except 块,在该块中,它应该由匹配的异常类处理。

name = “Austin”;
print(name)
登录后复制
登录后复制
登录后复制

从上面的代码片段中,如果将非数值传递给程序,则会创建异常对象并引发 ValueError。控制立即跳转到 except 块,在该块中它会扫描合适的异常类。在这里,ValueError 类就足够了。错误已得到正确处理。但是,如果找不到正确的类,则控制会移动到外部 try 块(如果有的话),如果仍然没有正确处理异常,则程序会崩溃。

使用一个 except 语句处理多个异常类

可以检查多个异常类并处理特定异常。如果您不确定几个异常中的哪一个会导致代码执行结果,则首选这种方法。请参见下面的代码片段。

active = True
if (active):
print(“The user is active”)
登录后复制
登录后复制

通配符异常类

Exception 类是 BaseException 的直接子类。Exception 类是所有非致命异常的基类。

大多数情况下,Exception 类足以处理代码执行期间引发的多数异常。

if (active):
    print(“The user is active”)
登录后复制
登录后复制

即使 Exception 类能够处理非致命异常,最好还是谨慎使用它。使用正确的 Exception 类,因为它更有利于调试和提高代码的可读性。

使用 finally 语句

包装在 finally 块中的代码部分无论是否发生异常都会执行。这使得它适合处理清理任务;关闭文件和释放内存资源。

def str_num(num_string):
    return(int(string))
登录后复制
登录后复制

创建自定义异常类

创建自定义异常使程序员能够为软件程序提出特定的异常。这可能包含可能对特定软件程序的功能有害的特殊条件或极端情况。定义的自定义异常类必须从 Exception 类继承。

print(str_num(“123”)) #works perfectly
print(str_num(“abc”)) #raises a ValueError
登录后复制
登录后复制

上面的代码片段显示了如何创建和使用自定义异常。根据用例,它可以以更复杂的方式使用。

为什么错误/异常处理很重要

“不要相信用户”是软件开发人员中常见的说法,这重申了您无法完全确定用户将如何与您的软件应用程序交互;他们输入的输入类型以及您作为程序员在编写应用程序时可能没有想到的其他一些极端情况。下面解释了正确处理错误/异常的一些重要原因:

  1. 防止崩溃 如果没有异常处理,未处理的错误可能会导致程序突然崩溃。这可能导致数据丢失或用户体验不佳。 示例: 没有异常处理:
print(10 / 0) # ZeroDivisionError: division by zero

使用异常处理:

try: print(10 / 0) except ZeroDivisionError: print("不能除以零!")

  1. 改善用户体验 正确处理的异常会提供有意义的错误消息,而不是神秘的系统错误,从而使应用程序更易于使用。 示例:
try: age = int(input("输入您的年龄:")) except ValueError: print("无效输入!请输入数字。")
  1. 保持应用程序稳定性 它允许应用程序即使在遇到错误后也能继续运行,从而确保稳定性。 示例:
def divide(a, b): try: return a / b except ZeroDivisionError: return "不允许除以零!"

print(divide(10, 2)) # 输出:5.0 print(divide(10, 0)) # 输出:不允许除以零!

  1. 处理极端情况 异常处理使您可以考虑不可预测的情况,例如网络故障、文件丢失或无效用户输入。 示例:
try: with open("data.txt", "r") as file: content = file.read() except FileNotFoundError: print("找不到该文件。")
  1. 鼓励编写简洁的代码
    通过将正常逻辑与错误处理逻辑分开,异常处理使您的代码更易于阅读、调试和维护。

  2. 促进调试
    借助详细的错误消息和异常日志,开发人员可以快速识别和修复代码中的问题。
    示例:

import logging

try: result = 10 / 0 except Exception as e: logging.error("发生错误", exc_info=True)

  1. 对于关键系统至关重要 在可靠性至关重要的系统(例如银行、医疗保健)中,异常处理对于确保安全地管理错误而不会导致数据损坏或丢失是必要的。

结论

在编程术语中,错误和异常大多数时候可以互换使用。Python 中错误和异常之间的关键区别在于它们如何影响我们的软件程序。语法错误和缩进错误等错误会在解释器解析程序时使程序崩溃。另一方面,如果未正确处理异常,则异常会在运行时使程序崩溃。自定义异常通过使程序员能够定义特定于特定软件应用程序的异常类来扩展错误处理功能。

错误处理对于调试也非常重要。它可以使我们看到应用程序中发生错误的原因,从而为软件维护人员提供足够的信息来解决问题。始终确保在代码中适当地引入异常处理,以确保软件应用程序的健壮性。

感谢您的阅读。

以上是Python 中的错误处理:最佳实践。探索如何有效处理异常的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Python vs.C:申请和用例 Python vs.C:申请和用例 Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。 Python以简洁和强大的生态系统着称,C 则以高性能和底层控制能力闻名。

您可以在2小时内学到多少python? 您可以在2小时内学到多少python? Apr 09, 2025 pm 04:33 PM

两小时内可以学到Python的基础知识。1.学习变量和数据类型,2.掌握控制结构如if语句和循环,3.了解函数的定义和使用。这些将帮助你开始编写简单的Python程序。

Python:游戏,Guis等 Python:游戏,Guis等 Apr 13, 2025 am 12:14 AM

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

2小时的Python计划:一种现实的方法 2小时的Python计划:一种现实的方法 Apr 11, 2025 am 12:04 AM

2小时内可以学会Python的基本编程概念和技能。1.学习变量和数据类型,2.掌握控制流(条件语句和循环),3.理解函数的定义和使用,4.通过简单示例和代码片段快速上手Python编程。

Python:探索其主要应用程序 Python:探索其主要应用程序 Apr 10, 2025 am 09:41 AM

Python在web开发、数据科学、机器学习、自动化和脚本编写等领域有广泛应用。1)在web开发中,Django和Flask框架简化了开发过程。2)数据科学和机器学习领域,NumPy、Pandas、Scikit-learn和TensorFlow库提供了强大支持。3)自动化和脚本编写方面,Python适用于自动化测试和系统管理等任务。

Python与C:学习曲线和易用性 Python与C:学习曲线和易用性 Apr 19, 2025 am 12:20 AM

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

Python和时间:充分利用您的学习时间 Python和时间:充分利用您的学习时间 Apr 14, 2025 am 12:02 AM

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python:自动化,脚本和任务管理 Python:自动化,脚本和任务管理 Apr 16, 2025 am 12:14 AM

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

See all articles