在编程领域,手动引发异常是一项极为实用的技巧,它允许我们在程序遭遇特定问题时,迅速地发出错误提示,便于后续的调试与处理。接下来,我将深入探讨在编程过程中如何手动引发异常,以及需要注意的相关事项。
抛出异常的基本方法
若需手动引发异常,应采用 raise 关键字。在此过程中,务必选择与问题最贴合的特定异常类来创建异常对象,并确保错误提示内容详尽具体。例如:
抛出异常,提示:“发生了一件非常特定的不良事件。”
避免抛出通用异常
使用泛泛而谈的策略并非明智之举,此举可能导致某些潜在的错误未被察觉,同时,在处理异常时,还可能将其他更为特定的子类异常一同捕捉,进而使得问题难以精确诊断。
隐藏 bug 的问题
def demo_bad_catch():
try:
引发异常,提示:“存在潜在缺陷,切勿捕获此异常”
抛出异常,提示:“这正是您期望处理的异常情况。”
except Exception as error:
输出信息:“捕获到错误:” + 错误的描述
demo_bad_catch()
在这个案例中,原本应当捕捉到的信息却被遮挡了,这种情况不利于我们揭示问题的实质。
特定捕获失效问题
def demo_no_catch():
try:
抛出异常信息:“未由特定处理捕获的通用异常”
except ValueError as e:
输出信息表明:我们不会捕获异常——异常类型。
demo_no_catch()
这个例子表明,特定的异常捕获无法捕获通用的 。
最佳实践raise语句
采用最为详尽的异常生成方法,同时允许向该生成方法传输不限量的参数。
引发异常,提示“发生了非常具体的不良事件”,并附带参数‘foo’、‘bar’和‘baz’。
这些参数可以通过异常对象的 args 属性访问。
子句
在子句执行过程中,若需记录错误详情并再次引发异常,同时确保保留完整的堆栈记录,建议采用不带任何参数的 raise 语句来操作。
import logging
初始化日志记录器,名为当前模块名,通过调用logging模块的getLogger方法实现。
try:
# 这里是容易出错的代码
pass
except AppError as error:
logger.error(error)
raise
3 中的异常语法
在 3 里,有四种不同的异常抛出语法:
直接引发异常。使用raise关键字可以抛出异常,当调用raise时,可以附带参数,这些参数会在异常对象被打印出来时一同展示。
try:
引发错误,提示:“我已抛出异常”
except ValueError as exp:
print("Error", exp)
执行不带任何参数的 raise 语句,将导致系统重新抛出之前发生的异常。
try:
result = 10 / 0
except Exception:
# 做一些清理工作
raise
用于构建异常链,新出现的异常能够携带原有异常的详尽信息,参数为(args)。
定义一个名为MyCustomException的异常类,该类继承自Exception基类。
pass
try:
try:
result = 10 / 0
若捕获到除以零的错误,则以exp变量接收该异常。
输出提示:“除零错误 -- ”,并显示相关信息。
引发 MyCustomException 异常,异常信息为 "除零错误",并将异常源追溯到 exp。
若捕获到MyCustomException异常,则以exp作为其实例。
print("MyException", exp)
print(exp.__cause__)
其他抛出异常的方式使用 语句
语句的功能是检验条件是否达成,若条件未达成,则会引发异常。然而,需留意的是,在执行解释器时,若启用了-O标志,那么该语句将会被自动忽略。
def avg(marks):
断言标记列表长度非零,否则提示“列表为空”。
计算总分,然后除以评分数量,得出平均分。
mark2 = [55, 88, 78, 90, 79]
输出:“mark2的平均值:”,接着是计算得到的avg(mark2)的值。
mark1 = []
输出:“mark1的平均分:”,逗号,avg函数计算出的(mark1)的平均值。
自定义异常
在编写代码库时,我们完全能够设立定制的异常类型,这样做是一种非常值得推荐的做法。首先,我们可以定义一个基础的异常类,随后基于此进一步构建出更加细分的子异常类。
定义一个名为MyModuleBaseClass的类,该类继承自异常基类。
pass
定义了一个名为MoreSpecificException的新类,它继承自MyModuleBaseClass。
pass
raise MoreSpecificException
引发更具体的异常,传递信息字符串。
总的来说,在编写代码时,若需手动引发异常,应优先选择特定的异常类别,而非采用通用的异常处理方式,这样做有助于提升代码的易读性和维护性。
扫一扫在手机端查看
-
Tags : 陕西Python
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。


客服1