目录
>
函数打印了控制台的异常类型,然后再次提高异常。
提出了例外,无论是否处理过例外,该文件都将立即正确关闭。它在Web应用程序中特别有用,在Web应用程序中,您可以以通用的方式对待所有异常:只需记录异常,然后将错误消息返回给呼叫者。
>错误记录器
首页 后端开发 Python教程 使用Python处理专业错误

使用Python处理专业错误

Mar 04, 2025 am 10:58 AM

在本教程中,您将从整个系统的角度学习如何处理Python中的错误条件。错误处理是设计的关键方面,它从最低级别(有时是硬件)一直到最终用户。如果您没有一致的策略,您的系统将不可靠,用户体验将很差,您将面临很多挑战,并且要调试和故障排除。状态代码和异常。状态代码可以由任何编程语言使用。异常需要语言/运行时支持。

python支持异常。 Python及其标准图书馆使用例外情况,可以自由地报告许多特殊情况,例如IO错误,除以零,不超出界限,以及一些不太特殊的情况,例如迭代的终结(尽管隐藏了)。大多数库都遵循并提出例外。

这意味着您的代码无论如何都必须处理Python和库提出的例外,因此您不妨在必要时从代码中提出异常,而不是依赖状态代码。

>

快速示例

>

>

>

这是调用try

子句时的输出。如果没有例外,则该程序会跳过
def f():<br>    return 4 / 0<br>def g():<br>    raise Exception("Don't call us. We'll call you")<br>def h():<br>    try:<br>        f()<br>    except Exception as e:<br>        print(e)<br>    <br>    try:<br>        g()<br>    except Exception as e:<br>        print(e)<br>
登录后复制
登录后复制
登录后复制
登录后复制
子句。 

>如果输入一个整数,则程序可以按预期工作。但是,如果您输入浮子或字符串,则程序将停止执行。

当您捕获异常时,您有三个选项:
Please enter a number: 10.3<br>Oops!  That was no valid number.  Try again...<br>Please enter a number: hello<br>Oops!  That was no valid number.  Try again...<br>Please enter a number: 10.0<br>Oops!  That was no valid number.  Try again...<br>Please enter a number: <br>
登录后复制
登录后复制
登录后复制

  • >
  • 悄悄地吞下它(静静地处理并继续运行)。

>吞咽异常

import json<br>import yaml<br><br>def parse_file(filename):<br>    try:<br>        return json.load(open(filename))<br>    except json.JSONDecodeError<br>        return yaml.load(open(filename))<br>
登录后复制
登录后复制
登录后复制
>如果您知道如何处理并可以完全恢复它,则应吞下异常。如果JSON解析器提出了该文件不是有效的JSON文件的例外,请吞下它并尝试使用YAML解析器。如果YAML解析器也失败了,那么您让异常传播。

>请注意,其他例外(例如未找到或未读取权限的文件)将传播,并且不会被特定条款捕获。在这种情况下,这是一个很好的策略,您只需要在JSON解析因JSON编码问题而失败的情况下尝试YAML解析。>如果要处理except Exception>

所有例外,则只需使用 <code> <code> <code> dececkion excect 。例如:<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">def f():&lt;br&gt; return 4 / 0&lt;br&gt;def g():&lt;br&gt; raise Exception(&quot;Don't call us. We'll call you&quot;)&lt;br&gt;def h():&lt;br&gt; try:&lt;br&gt; f()&lt;br&gt; except Exception as e:&lt;br&gt; print(e)&lt;br&gt; &lt;br&gt; try:&lt;br&gt; g()&lt;br&gt; except Exception as e:&lt;br&gt; print(e)&lt;br&gt;</pre><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div><div class="contentsignin">登录后复制</div></div>><p>请注意,通过添加<code>as e,您可以将异常对象绑定到您的名称e>的name

>。这使您可以执行一些本地处理,但仍然可以让高层处理。在这里,

函数打印了控制台的异常类型,然后再次提高异常。

raise>提出不同的异常invoke_function()

>在某些情况下,您想提出不同的例外。有时,您想将多个不同的低级异常分组为一个类别,该类别由高级代码统一处理。在订单案例中,您需要将异常转换为用户级别,并提供一些特定于应用程序的上下文。
Please enter a number: 10.3<br>Oops!  That was no valid number.  Try again...<br>Please enter a number: hello<br>Oops!  That was no valid number.  Try again...<br>Please enter a number: 10.0<br>Oops!  That was no valid number.  Try again...<br>Please enter a number: <br>
登录后复制
登录后复制
登录后复制

最后句子

有时您想确保执行某些清理代码,即使在此过程中提出了一个例外。例如,您可能有一个数据库连接,一旦完成后就要关闭。这是做错方法的错误方法:

如果

函数提出了异常,则对
import json<br>import yaml<br><br>def parse_file(filename):<br>    try:<br>        return json.load(open(filename))<br>    except json.JSONDecodeError<br>        return yaml.load(open(filename))<br>
登录后复制
登录后复制
登录后复制
>的调用将永远不会执行,并且DB连接将保持打开状态。尝试执行所有异常处理程序后,子句始终执行。这是正确执行操作的方法:

query()close_db_connection()> finally的调用可能不会返回连接或提出异常本身。在这种情况下,无需关闭DB连接。

def print_exception_type(func, *args, **kwargs):<br>    try:<br>        return func(*args, **kwargs)<br>    except Exception as e:<br>        print(type(e))<br>
登录后复制
使用

>,您必须注意不要在那里引起任何例外,因为它们会掩盖原始异常。open_db_connection()>

上下文经理

finally

with

def invoke_function(func, *args, **kwargs):<br>    try:<br>        return func(*args, **kwargs)<br>    except Exception as e:<br>        print(type(e))<br>        raise<br>
登录后复制

上下文管理者在清理代码中包装其他机制,即使在清理代码中均已自动执行。您使用的是process()>语句,而不是尝试封锁。这是一个具有文件的示例:即使with提出了例外,当退出

>块的范围时,即使

提出了例外,无论是否处理过例外,该文件都将立即正确关闭。它在Web应用程序中特别有用,在Web应用程序中,您可以以通用的方式对待所有异常:只需记录异常,然后将错误消息返回给呼叫者。

在记录时,记录异常类型,错误消息和stacktrace是很有用的。所有这些信息都可以通过

>对象获得,但是如果您在异常处理程序中使用

方法,则Python记录系统将为您提取所有相关信息。

>这是我建议的最佳实践:

def f():<br>    return 4 / 0<br>def g():<br>    raise Exception("Don't call us. We'll call you")<br>def h():<br>    try:<br>        f()<br>    except Exception as e:<br>        print(e)<br>    <br>    try:<br>        g()<br>    except Exception as e:<br>        print(e)<br>
登录后复制
登录后复制
登录后复制
登录后复制

>如果您遵循此模式(假设您是否正确设置记录),那么无论发生什么情况,您都会在日志中获得不错的记录,并且可以解决该问题。这是一种浪费,它可能会使您感到困惑,并让您认为同一问题的多个实例发生了多次记录的一个实例。

>

>最简单的方法是让所有例外的方式让所有异常传播(除非可以自信地吞咽和吞咽),然后将其登录到您的应用程序/系统/系统的最高级别。功能。最常见的实现是使用日志文件。但是,对于具有数百,数千或更多服务器的大型分布式系统,这并不总是最好的解决方案。

跟踪整个基础架构中的异常,诸如Sentry之类的服务非常有用。它集中了所有异常报告,除了堆叠式添加每个堆栈框架的状态之外(在提高异常时变量的值)。它还提供了一个非常不错的界面,其中包含仪表板,报告和方法来通过多个项目分解消息的方法。它是开源的,因此您可以运行自己的服务器或订阅托管版本。下面是屏幕截图,是一个屏幕截图,显示Sentry如何显示Python应用程序中的错误。

>

,这是文件的详细堆栈跟踪,导致错误。在问题的第一个迹象的系统中,吓坏了的系统不是很有用。

如果您的代码正在访问某些不响应的远程系统,则传统解决方案是超时,但有时并非每个系统都会按超时设计。随着条件的变化,超时并不总是很容易校准。

另一种方法是快速失败然后重试。好处是,如果目标响应迅速,那么您就不必花费大量时间在睡眠状态,并且可以立即做出反应。但是,如果失败了,您可以多次重试,直到确定它确实无法到达并引起例外。在下一部分中,我将介绍一个可以为您做的装饰器。

>有用的装饰器使用Python处理专业错误

>两个可以帮助解决错误处理的装饰器的是

>,它会使用Python处理专业错误

,它会再次登录例外,然后再提高它,然后将其重新调用,该装饰器将重新调用功能几次。

>错误记录器

这是一个简单的实现。装饰器除了登录对象。当它装饰功能并调用函数时,它将在一个try-except子句中包装呼叫,如果有例外,它将记录下来并最终提高异常。

def f():<br>    return 4 / 0<br>def g():<br>    raise Exception("Don't call us. We'll call you")<br>def h():<br>    try:<br>        f()<br>    except Exception as e:<br>        print(e)<br>    <br>    try:<br>        g()<br>    except Exception as e:<br>        print(e)<br>
登录后复制
登录后复制
登录后复制
登录后复制

Please enter a number: 10.3<br>Oops!  That was no valid number.  Try again...<br>Please enter a number: hello<br>Oops!  That was no valid number.  Try again...<br>Please enter a number: 10.0<br>Oops!  That was no valid number.  Try again...<br>Please enter a number: <br>
登录后复制
登录后复制
登录后复制
这是如何使用它的:

>

import json<br>import yaml<br><br>def parse_file(filename):<br>    try:<br>        return json.load(open(filename))<br>    except json.JSONDecodeError<br>        return yaml.load(open(filename))<br>
登录后复制
登录后复制
登录后复制

retier

retier >结论错误处理对用户和开发人员都至关重要。 Python在语言和标准库中为基于异常的错误处理提供了很好的支持。通过勤奋地遵循最佳实践,您可以征服这一经常被忽视的方面。>已通过Esther Vaati的贡献进行了更新。 Esther是Envato Tuts的软件开发人员和作者。

以上是使用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)

热门话题

Java教程
1677
14
CakePHP 教程
1431
52
Laravel 教程
1334
25
PHP教程
1280
29
C# 教程
1257
24
Python与C:学习曲线和易用性 Python与C:学习曲线和易用性 Apr 19, 2025 am 12:20 AM

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

学习Python:2小时的每日学习是否足够? 学习Python:2小时的每日学习是否足够? Apr 18, 2025 am 12:22 AM

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

Python vs.C:探索性能和效率 Python vs.C:探索性能和效率 Apr 18, 2025 am 12:20 AM

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

Python vs. C:了解关键差异 Python vs. C:了解关键差异 Apr 21, 2025 am 12:18 AM

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

Python标准库的哪一部分是:列表或数组? Python标准库的哪一部分是:列表或数组? Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

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

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

科学计算的Python:详细的外观 科学计算的Python:详细的外观 Apr 19, 2025 am 12:15 AM

Python在科学计算中的应用包括数据分析、机器学习、数值模拟和可视化。1.Numpy提供高效的多维数组和数学函数。2.SciPy扩展Numpy功能,提供优化和线性代数工具。3.Pandas用于数据处理和分析。4.Matplotlib用于生成各种图表和可视化结果。

Web开发的Python:关键应用程序 Web开发的Python:关键应用程序 Apr 18, 2025 am 12:20 AM

Python在Web开发中的关键应用包括使用Django和Flask框架、API开发、数据分析与可视化、机器学习与AI、以及性能优化。1.Django和Flask框架:Django适合快速开发复杂应用,Flask适用于小型或高度自定义项目。2.API开发:使用Flask或DjangoRESTFramework构建RESTfulAPI。3.数据分析与可视化:利用Python处理数据并通过Web界面展示。4.机器学习与AI:Python用于构建智能Web应用。5.性能优化:通过异步编程、缓存和代码优

See all articles