摘要:
程序错误是不可恢复的;当程序遇到错误时,它会立即退出或崩溃。
优秀的程序员会确保他们的代码或软件能够优雅地处理软件使用过程中可能出现的错误/异常,而不会崩溃或产生不良结果。想象一下,为金融机构编写仅接受数字输入的软件,如果用户输入了字母而不是数字进行算术运算,这通常会引发错误,并且软件会因为一个用户而崩溃,如果没有任何适当的机制来处理错误的话。这绝对不是一件好事——它对业务不利,可能导致客户感到沮丧,而且有人可能会因为不称职而丢掉工作。
在本文中,我们将学习如何以最佳方式处理代码中由于用户交互而可能出现的错误。敬请关注。
本文适合:
通读本文后,读者应该能够:
错误和异常通常可以互换使用,但它们在技术上含义不同。在 Python 中,错误和异常都是BaseException的子类,这进一步表明它们即使不同,也有一些共同点。
错误是不可恢复的;当我们的程序遇到错误时,它会立即退出或崩溃。即使您可能预料到错误,也没有办法以编程方式处理错误。下面列出了一些错误:
SyntaxError
:这是程序员面临的最常见错误类型之一,它发生在代码不遵循正确的 Python 语法时,并且可以在解析期间检测到。对于学习者或从其他编程语言转向 Python 的人来说,这是一个很容易出现的问题。
<code class="language-python">name = “Austin”; print(name)</code>
这会导致 SyntaxError
,因为在 Python 中,语句不会以分号结尾。
IndentationError
:当 Python 代码缩进不正确时,就会发生此错误,并在解析代码时检测到。Python 中的缩进非常重要。它是 Python 中唯一可以定义代码块的方式,这与大多数使用花括号的语言不同。
<code class="language-python">name = “Austin”; print(name)</code>
这段代码会因为缩进不当而导致错误。它应该是:
<code class="language-python">active = True if (active): print(“The user is active”)</code>
Python 中的异常在运行时发生。与错误不同,可以以编程方式正确地处理或捕获它们,以便我们的程序可以继续运行而不会崩溃。换句话说,它们是可恢复的。以下是 Python 中一些常见的异常:
这些类型的异常是 Python 编程语言的一部分。下面列出其中一些:
ValueError
:当向函数传递无效参数时发生此错误,即使类型可能正确。
<code class="language-python">if (active): print(“The user is active”)</code>
从上面的代码片段中,如果我们向函数传递数字字符串,它将成功转换为数字,否则,它将产生 ValueError
。
<code class="language-python">def str_num(num_string): return(int(string))</code>
TypeError
:当向函数传递不合适的类型参数时,就会引发此错误。
<code class="language-python">print(str_num(“123”)) #works perfectly print(str_num(“abc”)) #raises a ValueError</code>
这会引发 TypeError
。
IndexError
:当您尝试使用错误索引访问列表中的值时,就会出现此错误。
<code class="language-python">def addition(num1, num2): return num1 + num2 # calling the function addition(5, A)</code>
这会导致 IndexError
,因为 my_list[2]
无法访问。
KeyError
:当尝试使用错误或不存在的键访问字典中的值时,就会引发此错误。
<code class="language-python">my_list = [“dog”, “cat”] my_list[2]</code>
这会引发 KeyError
。
您可以在此处找到其他内置异常。
自定义异常由程序员定义。在这里,Python 使程序员能够手动定义程序应该在执行期间检查的条件,并在找到时引发异常。您可以通过创建一个从 Exception
类继承的类来实现这一点。
处理异常可确保我们的软件应用程序在遇到应用程序生命周期中出现的某些错误时具有可预测的性能。在本节中,您将学习如何在编程中实现这一点。
try-except
语句try-except
语句提供了一种安全的方法来处理可能引发错误或异常的代码。try
语句包装有问题的代码或 try
子句;这是很可能导致整个程序出错的代码部分;当从用户那里接收输入、从文件读取时,这很可能会发生,仅举几例。
except
语句标志着 except
子句的开始;这是包装在 except
块中的其余代码。except
子句处理 try
块中引发的异常。
让我带您了解执行工作流程。您的 Python 程序通常会执行,直到它到达包含“有问题的”代码的 try
块,如果当时在 try
块中执行代码时没有可能的错误,它会跳过 except
块并继续执行代码库的其余部分。但是,如果在 try
块中执行代码时遇到错误,则会在创建异常对象后,控制立即跳转到 except
块,在该块中,它应该由匹配的异常类处理。
<code class="language-python">name = “Austin”; print(name)</code>
从上面的代码片段中,如果将非数值传递给程序,则会创建异常对象并引发 ValueError
。控制立即跳转到 except
块,在该块中它会扫描合适的异常类。在这里,ValueError
类就足够了。错误已得到正确处理。但是,如果找不到正确的类,则控制会移动到外部 try
块(如果有的话),如果仍然没有正确处理异常,则程序会崩溃。
except
语句处理多个异常类可以检查多个异常类并处理特定异常。如果您不确定几个异常中的哪一个会导致代码执行结果,则首选这种方法。请参见下面的代码片段。
<code class="language-python">active = True if (active): print(“The user is active”)</code>
Exception
类是 BaseException
的直接子类。Exception
类是所有非致命异常的基类。
大多数情况下,Exception
类足以处理代码执行期间引发的多数异常。
<code class="language-python">if (active): print(“The user is active”)</code>
即使 Exception
类能够处理非致命异常,最好还是谨慎使用它。使用正确的 Exception
类,因为它更有利于调试和提高代码的可读性。
finally
语句包装在 finally
块中的代码部分无论是否发生异常都会执行。这使得它适合处理清理任务;关闭文件和释放内存资源。
<code class="language-python">def str_num(num_string): return(int(string))</code>
创建自定义异常使程序员能够为软件程序提出特定的异常。这可能包含可能对特定软件程序的功能有害的特殊条件或极端情况。定义的自定义异常类必须从 Exception
类继承。
<code class="language-python">print(str_num(“123”)) #works perfectly print(str_num(“abc”)) #raises a ValueError</code>
上面的代码片段显示了如何创建和使用自定义异常。根据用例,它可以以更复杂的方式使用。
为什么错误/异常处理很重要
“不要相信用户”是软件开发人员中常见的说法,这重申了您无法完全确定用户将如何与您的软件应用程序交互;他们输入的输入类型以及您作为程序员在编写应用程序时可能没有想到的其他一些极端情况。下面解释了正确处理错误/异常的一些重要原因:
使用异常处理:
try: print(10 / 0) except ZeroDivisionError: print("不能除以零!")
print(divide(10, 2)) # 输出:5.0 print(divide(10, 0)) # 输出:不允许除以零!
鼓励编写简洁的代码
通过将正常逻辑与错误处理逻辑分开,异常处理使您的代码更易于阅读、调试和维护。
促进调试
借助详细的错误消息和异常日志,开发人员可以快速识别和修复代码中的问题。
示例:
try: result = 10 / 0 except Exception as e: logging.error("发生错误", exc_info=True)
结论
在编程术语中,错误和异常大多数时候可以互换使用。Python 中错误和异常之间的关键区别在于它们如何影响我们的软件程序。语法错误和缩进错误等错误会在解释器解析程序时使程序崩溃。另一方面,如果未正确处理异常,则异常会在运行时使程序崩溃。自定义异常通过使程序员能够定义特定于特定软件应用程序的异常类来扩展错误处理功能。
错误处理对于调试也非常重要。它可以使我们看到应用程序中发生错误的原因,从而为软件维护人员提供足够的信息来解决问题。始终确保在代码中适当地引入异常处理,以确保软件应用程序的健壮性。
感谢您的阅读。
以上是Python 中的错误处理:最佳实践。探索如何有效处理异常的详细内容。更多信息请关注PHP中文网其他相关文章!