在本教程中,您将从整个系统的角度学习如何处理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 。例如:<pre class="brush:php;toolbar:false">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></pre>><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应用程序中的错误。
>,这是文件的详细堆栈跟踪,导致错误。在问题的第一个迹象的系统中,吓坏了的系统不是很有用。

>两个可以帮助解决错误处理的装饰器的是
>,它会
,它会再次登录例外,然后再提高它,然后将其重新调用,该装饰器将重新调用功能几次。
>错误记录器
这是一个简单的实现。装饰器除了登录对象。当它装饰功能并调用函数时,它将在一个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中文网其他相关文章!

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

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

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

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

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

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

Python3.6环境下加载Pickle文件报错:ModuleNotFoundError:Nomodulenamed...


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

WebStorm Mac版
好用的JavaScript开发工具

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。