搜索
首页后端开发Python教程Python 中的错误处理:最佳实践。探索如何有效处理异常

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
Python:深入研究汇编和解释Python:深入研究汇编和解释May 12, 2025 am 12:14 AM

pythonisehybridmodelofcompilationand interpretation:1)thepythoninterspretercompilesourcececodeintoplatform- interpententbybytecode.2)thepytythonvirtualmachine(pvm)thenexecuteCutestestestesteSteSteSteSteSteSthisByTecode,BelancingEaseofuseWithPerformance。

Python是一种解释或编译语言,为什么重要?Python是一种解释或编译语言,为什么重要?May 12, 2025 am 12:09 AM

pythonisbothinterpretedAndCompiled.1)它的compiledTobyTecodeForportabilityAcrosplatforms.2)bytecodeisthenInterpreted,允许fordingfordforderynamictynamictymictymictymictyandrapiddefupment,尽管Ititmaybeslowerthananeflowerthanancompiledcompiledlanguages。

您可以使用Python中的循环加入列表吗?您可以使用Python中的循环加入列表吗?May 10, 2025 am 12:14 AM

是的,YouCanconCatenatElistsusingAloopInpyThon.1)使用eparateLoopsForeachListToAppendIteMstoaresultList.2)useanestedlooptoiterateOverMultipliplipliplipliplipliplipliplipliplipliplistforamoreConciseApprace.3)

condenate列表python:使用,扩展()等condenate列表python:使用,扩展()等May 10, 2025 am 12:12 AM

ThemostefficientmethodsforconcatenatinglistsinPythonare:1)theextend()methodforin-placemodification,2)itertools.chain()formemoryefficiencywithlargedatasets.Theextend()methodmodifiestheoriginallist,makingitmemory-efficientbutrequirescautionifpreserving

Python循环:示例和最佳实践Python循环:示例和最佳实践May 10, 2025 am 12:05 AM

pythonboopsincludeforandwhileloops,with forloopsidealforequencessand and whileloopsforcondition repetition.bestpracticesinvolve:1)使用listComprehensionsforshensionsforsimpletranspletransformations,2)obseringEnumerateForIndex-valuepairs,3)optingftingftingfortermornemoremoremoremore

Python的执行模型:编译,解释还是两者?Python的执行模型:编译,解释还是两者?May 10, 2025 am 12:04 AM

pythonisbothCompileDIntered。

Python是按线执行的吗?Python是按线执行的吗?May 10, 2025 am 12:03 AM

Python不是严格的逐行执行,而是基于解释器的机制进行优化和条件执行。解释器将代码转换为字节码,由PVM执行,可能会预编译常量表达式或优化循环。理解这些机制有助于优化代码和提高效率。

python中两个列表的串联替代方案是什么?python中两个列表的串联替代方案是什么?May 09, 2025 am 12:16 AM

可以使用多种方法在Python中连接两个列表:1.使用 操作符,简单但在大列表中效率低;2.使用extend方法,效率高但会修改原列表;3.使用 =操作符,兼具效率和可读性;4.使用itertools.chain函数,内存效率高但需额外导入;5.使用列表解析,优雅但可能过于复杂。选择方法应根据代码上下文和需求。

See all articles

热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

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

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

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