实验9自定义异常的使用
一篇文章带你弄懂Python异常传递和自定义异常
一篇文章带你弄懂Python异常传递和自定义异常回复“Go语言”即可获赠从入门到进阶共10本电子书今日鸡汤似此星辰非昨夜,为谁风露立中宵。
大家好,我是Go进阶者,今天给大家分享一些Python基础 (异常传递和自定义异常),上篇文章有说到:一篇文章带你弄懂Python异常简介和案例分析,这篇文章一起来看看异常其他知识吧~一、异常的传递1. try嵌套中••••••••••••••••••import timetry: f = open('test.txt') try: while True: content = f.readline() if len(content) == 0: break time.sleep(2) finally: f.close() print('关闭文件')except : print("没有这个文件")finally: print("最后的finally")# 这是test.txt文件中读取到信息运行结果:2. 函数嵌套调用中•••••••••••••••••••••••••def test1(): print("----test1-1----") print(num) print("----test1-2----")def test2(): print("----test2-1----") test1() print("----test2-2----")def test3(): try: print("----test3-1----") test1() print("----test3-2----") except Exception as result: print("捕获到了异常,信息是:%s"%result)print("----test3-2----")test3() print("------华丽的分割线-----") test2()运行结果:小总结:1.如果try嵌套,那么如果里面的try没有捕获到这个异常,那么外面的try会接收到这个异常,然后进行处理,如果外边的try依然没有捕获到,那么再进行传递。
C# 抛出预定义异常和用户自定义异常
if(value>10)
age=value;
else
thrownewArgumentException("发生异常,年龄小于10!");
}
}
}
(3)在Program类的Main()方法中,定义一个Person类的实例p,使用try部分设置p的年龄为9时抛出预定义异常。
//抛出预定义异常
Personp=newPerson();
try
{
//年龄小于10时,抛出异常
p.Age=9;
}
catch(Exceptione)
{
Console.WriteLine(e.Message);
}
(4)自定义PayOverFlowException异常类从ApplicationException类派生。使用base关键字引用ApplicationException类中含有一个string参数的构造函数。
(2)在该项目中添加一个Person类,在Person类中定义一个age字段并在其set访问器中使用设置预定义异常。
//定义Person类
classPerson
{
publicPerson()
{}
//数据成员age
privateintage;
publicintAge
{
get
{
returnage;
}
set
//用户自定义的异常类
publicclassPayOverFlowException:ApplicationException
{
publicPayOverFlowException()
{
}
publicPayOverFlowException(stringmessage):base(message)
第9章 异常处理
在C++中,异常是指从发生问题的代码区域传递到处 理问题的代码区域的一个对象。见下图。
第9章 异常处理
9.2.2 异常处理的执行过程
【例9.2】示例使用异常处理来处理错误。
第9章 异常处理
9.2.2 异常处理的执行过程
返回本节
第9章 异常处理
9.2.3 异常接口声明
异常接口声明也称为抛出列表(throw list),已经 成为函数界面的一部分。它一方面显式地给出了一个函 数抛出异常的界面,另一方面也限制了该函数抛出异常 的类型。
9.2.1 异常处理的语法 9.2.2 异常处理的执行过程
9.2.3 异常接口声明
9.2.4 标准库的异常处理
返回首页
第9章 异常处理
9.2.1 异常处理的语法
C++异常处理用到的关键字有try、throw和catch。 1.try块语法 try块的定义指示可能在这段程序的执行过程中发生错误, 通常称为测试块。其语法格式如下: try
第9章 异常处理
9.2.3 异常接口声明
【例9.3】使用异常接口声明,进一步示例异常处理的 实现过程。
第9章 异常处理
9.2.3 异常接口声明
返回本节
第9章 异常处理
9.2.4 标准库的异常处理
exception
logic_error
runtime_error
domain_error
Java异常之自定义异常
Java异常之⾃定义异常⾃定义异常类⾃定义异常1、使⽤ Java 内置的异常类可以描述在编程时出现的⼤部分异常情况。
除此之外,⽤户还可以⾃定义异常。
⽤户⾃定义异常类,只需继承 Exception 类即可。
2、在程序中使⽤⾃定义异常类,⼤体可以分为以下⼏个步骤:创建⾃定义异常类在⽅法中通过 throw 关键字抛出异常对象如果在当前抛出异常的⽅法中处理异常,可以使⽤ try-catch 语句捕获异常并处理;否则在⽅法的声明处通过 throws 关键字指明要抛出给⽅法调⽤者的异常,继续进⾏下⼀步操作在出现异常⽅法的调⽤者中捕获并处理异常3、实际应⽤中的经验总结:1. 处理运⾏时异常时,采⽤逻辑去合理规避同时辅助 try-catch 处理2. 在多重 catch 块后⾯,可以加⼀个 catch(Exception) 来处理可能会被遗漏的异常注:catch(Exception)是最⼤的异常类3. 对于不确定的代码,也可以加上 try-catch,处理潜在的异常4. 尽量去处理异常,切忌只是简单地调⽤ printStackTrace() 去打印输出5. 具体如何处理异常,要根据不同的业务需求和异常类型去决定6. 尽量添加 finally 语句块去释放占⽤的资源如:IO 流 ~ Scanner ~package exception.demo2;/*** java 异常之⾃定义异常:* 1、使⽤ Java 内置的异常类可以描述在编程时出现的⼤部分异常情况。
* 除此之外,⽤户还可以⾃定义异常。
⽤户⾃定义异常类,只需继承 Exception 类即可。
* 2、在程序中使⽤⾃定义异常类,⼤体可以分为以下⼏个步骤:* (1)创建⾃定义异常类* (2)在⽅法中通过 throw 关键字抛出异常对象* (3)如果在当前抛出异常的⽅法中处理异常,可以使⽤ try-catch 语句捕获异常并处理;* 否则在⽅法的声明处通过 throws 关键字指明要抛出给⽅法调⽤者的异常,继续进⾏下⼀步操作* (4)在出现异常⽅法的调⽤者中捕获并处理异常* 3、实际应⽤中的经验总结:* (1)处理运⾏时异常时,采⽤逻辑去合理规避同时辅助 try-catch 处理* (2)在多重 catch 块后⾯,可以加⼀个 catch(Exception) 来处理可能会被遗漏的异常* 注:catch(Exception)是最⼤的异常类* (3)对于不确定的代码,也可以加上 try-catch,处理潜在的异常* (4)尽量去处理异常,切忌只是简单地调⽤ printStackTrace() 去打印输出* (5)具体如何处理异常,要根据不同的业务需求和异常类型去决定* (6)尽量添加 finally 语句块去释放占⽤的资源如:IO 流 ~ Scanner ~*/public class MyException extends Exception {/*** 传递⼀个数字* 如果这个数字⼤于10 则抛出异常*/private int detail;//构造器public MyException(int a) {this.detail = a;}//toString:异常的打印信息@Overridepublic String toString() {return "捕获⾃定义异常 MyException { " +"当前参数 " + detail + " > 10 " +'}';}}测试类测试异常try-catch 语句捕获异常throw 关键字在⽅法中抛出异常throws 关键字在⽅法上抛出异常package exception.demo2;/*** 测试类* 测试异常*/public class Test {//可能会存在异常的⽅法static void test(int a) throws MyException {System.out.println("传递的参数为:" + a);if (a > 10) {/*** 此处可以通过 try-catch 语句捕获异常* 也可以在⽅法上通过 throws 关键字抛出异常 * 此处选择捕获,外⾯就不⽤再捕获* 此处选择抛出,外⾯需要捕获*/throw new MyException(a); //抛出}System.out.println("OK");}public static void main(String[] args) {//需要捕获异常try {test(11);} catch (MyException e) {//此处增加⼀些处理异常的代码块System.out.println("MyException => " + e); }}}。
Java自定义异常与异常使用的最佳方式
Java⾃定义异常与异常使⽤的最佳⽅式⽬录异常的分类1. ⾮运⾏时异常(Checked Exception)2. 运⾏时异常(Runtime Exception/Unchecked Exception)异常的处理⼀、对应⾮运⾏时异常,必须对其进⾏处理⼆、对于运⾏时异常,可以不对其进⾏处理应⽤场景⾃定义异常类过程1. 多数情况下扩展2. 声明⽅法抛出⾃定义异常3.⾃定义异常测试操作使⽤异常的最佳实践1. 记得释放资源2. 不要使⽤异常作控制流程之⽤3. 不要忽略异常4. 不要 catch 最⾼层次的 exception5. 仅记录 exception ⼀次总结:异常的分类1. ⾮运⾏时异常(Checked Exception)Java中凡是继承⾃Exception但不是继承⾃RuntimeException的类都是⾮运⾏时异常。
2. 运⾏时异常(Runtime Exception/Unchecked Exception)RuntimeException类直接继承⾃Exception类,称为运⾏时异常。
Java中所有的运⾏时异常都直接或间接的继承⾃RuntimeException。
Java中所有的异常类都直接或间接的继承⾃Exception。
异常的处理⼀、对应⾮运⾏时异常,必须对其进⾏处理处理⽅式有两种:使⽤try…catch…finally语句块进⾏捕获在产⽣异常的⽅法所在的⽅法声明throws Exception⼆、对于运⾏时异常,可以不对其进⾏处理也可以对其进⾏处理。
⼀般情况下都不对其进⾏处理。
在使⽤Java API的⽅法时会产⽣异常,由于实际的需要,我们需要创建和使⽤⾃定义异常。
使⽤全新的异常类,应⽤到系统程序中。
在介绍⾃定义异常时,⾸要先谈谈什么要使⽤⾃定义异常,使⽤⾃定义异常的好处。
创建⾃定义异常是为了表⽰应⽤程序的⼀些错误类型,为代码可能发⽣的⼀个或多个问题提供新的含义;可以显⽰代码多个位置之间的错误的相似处,也可区分代码运⾏时可能出现的相似问题的⼀个或多个错误,或给出应⽤程序中⼀组错误的特殊含义。
实验六:异常处理与自定义异常
实验六:异常处理与自定义异常实验故事背景注意看,这里有个男人叫小帅,他是一个计算机高手,他的性格孤僻且自负。
然而,有一天,班上有一个女同学,叫做小美,她聪明且有趣,决定给小帅一点儿“特殊”的关怀。
于是她给小帅提供了一份有异常的代码(直接执行会报错),想让小帅出丑,假设你现在是小帅,请你解决掉这些异常((采用异常处理知识来处理异常,对于不同异常问题提出不同的解决方案)。
实验目标理解Java中的异常处理机制。
学会识别和处理常见异常。
增强对自定义异常的理解和应用能力。
提高代码的可读性和健壮性。
实验要求●阅读以下代码,识别其中的异常处理不当或缺失的部分。
●修改代码,确保能够正确捕获并处理以下异常,包括自定义异常。
●确保在程序结束时,资源能够安全释放。
代码如下:import java.util.InputMismatchException;import java.util.Scanner;// 自定义异常类class NegativeNumberException extends Exception {public NegativeNumberException(String message) {super(message);}}public class SimpleCalculator {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);double number1, number2, result = 0;int i;// 读取用户输入// 请注意输入的数字必须为正数,如果为非正整数,则爆出自定义异常。
System.out.print("请输入第一个数字:");number1 = scanner.nextDouble();System.out.print("请输入第二个数字:");number2 = scanner.nextDouble();result = number1 / number2;int[] a={1,2,3,4};for(i=0;i<5;i++)System.out.println(" a["+i+"]="+a[i]);System.out.println("结果是:" + result); // 如果发生异常,结果可能为0scanner.close(); // 确保资源被关闭}}实验提交1.Java代码文件2.代码运行结果3.对实验的总结和反思实验注意事项代码需符合Java的编码规范,命名清晰。
第九章异常处理及程序调试
例9-1:传统处理程序出错及Python处理 异常比较
• 编写函数getRatios(v1, v2)。 • 假定参数v1、v2是等长的数字列表,要求
返回一个列表,该列表包含v1[i]/v2[i] 有意义的值。
使用传统程序设计方法处理错误:
调用及执行:
使用Python异常处理机制实现:
执行:
对比之下,传统处理错误方法的缺点显而易见:
例9-7:自定义异常
执行结果:
5、assert语句的使用
• assert语句用于检测某个条件表达式是否 为真。
• assert语句又称为断言语句,即assert 认为检测的表达式永远为真。
• if语句中的条件判断都可以使用assert语 句检测。例如,检测某个元组中元素的个 数是否大于1,如果assert语言断言失败 ,会引发AssertionError异常。
• 程序难读,因此难以维护和修改 • 效率较低
二、异常的处理
1、try…except的使用 • try…except语句用于处理问题语句,捕
获可能出现的异常。
• try子句中的代码块放置可能出现异常的语 句,except子句中的代码块处理异常。当 异常出现时,Python会自动生成1个异常 对象,该对象包括异常的具体信息,以及 异常的种类和错误位置。
例如:试图打开不存在的文件
• 说明:出现了FileNotFoundError异常
例9-2:使用try…except捕获 FileNotFoundError异常
执行结果:
又如:
• 同样可以使用try…except语句来处理该异常。 try…except语句后还可以添加1个else子句, 当try子句中的代码发生异常时,程序直接跳转 到except子句;反之,程序将执行else子句。
python用户自定义异常的实例讲解
python⽤户⾃定义异常的实例讲解说明1、程序可以通过创建⼀个新的异常类来命名它们⾃⼰的异常。
异常应该是典型的继承⾃Exception类,直接或间接的⽅式。
2、异常python有⼀个⼤基类,继承了Exception。
因此,我们的定制类也必须继承Exception。
实例class ShortInputException(Exception):def __init__(self, length, atleast):self.length = lengthself.atleast = atleastdef main():try:s = input('请输⼊ --> ')if len(s) < 3:# raise引发⼀个你定义的异常raise ShortInputException(len(s), 3)except ShortInputException as result:#x这个变量被绑定到了错误的实例print('ShortInputException: 输⼊的长度是 %d,长度⾄少应是 %d'% (result.length, result.atleast))else:print('没有异常发⽣')main()知识点扩展:⾃定义异常类型#1.⽤户⾃定义异常类型,只要该类继承了Exception类即可,⾄于类的主题内容⽤户⾃定义,可参考官⽅异常类class TooLongExceptin(Exception):"this is user's Exception for check the length of name "def __init__(self,leng):self.leng = lengdef __str__(self):print("姓名长度是"+str(self.leng)+",超过长度了")捕捉⽤户⼿动抛出的异常#1.捕捉⽤户⼿动抛出的异常,跟捕捉系统异常⽅式⼀样def name_Test():try:name = input("enter your naem:")if len(name)>4:raise TooLongExceptin(len(name))else :print(name)except TooLongExceptin,e_result: #这⾥异常类型是⽤户⾃定义的print("捕捉到异常了")print("打印异常信息:",e_result)#调⽤函数,执⾏name_Test()==========执⾏结果如下:==================================================enter your naem:aaafsdf捕捉到异常了Traceback (most recent call last):打印异常信息:姓名长度是7,超过长度了姓名长度是7,超过长度了File "D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py", line 16, in name_Testraise TooLongExceptin(len(name))__main__.TooLongExceptin: <exception str() failed>During handling of the above exception, another exception occurred:Traceback (most recent call last):File "D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py", line 26, in <module>name_Test()File "D:/pythoyworkspace/file_demo/Class_Demo/extion_demo.py", line 22, in name_Testprint("打印异常信息:",e_result)TypeError: __str__ returned non-string (type NoneType)以上就是python⽤户⾃定义异常的实例讲解的详细内容,更多关于python⽤户如何⾃定义异常的资料请关注其它相关⽂章!。
自定义异常类_Python程序设计_[共2页]
463.4.3 自定义异常类3.4.2节中介绍了如何捕捉异常,这些可能引发的异常类型是系统内置的,在某些错误出现时自动触发。
但有些时候,程序员需要根据自己的需要设置异常。
比如求解两个大于1的正整数x、y的最大公约数,当x、y的取值小于等于1时就认为是异常。
本节讨论自定义异常、raise语句与assert语句。
1.自定义异常首先要自己定义一个异常类。
那么如何创建自己的异常类呢?就像其他类一样,只是要确保从Exception类继承,那么编写一个自定义异常类基本上就像下面这样:class SomeCustomException(Exception):pass其中,SomeCustomException是自定义异常的名称,可以自己设定;Exception是自定义异常所继承的基类,通常就是这个名称;后面跟一个pass空语句,表示现在什么也不用做,因为具体的异常处理代码可以写在自定义异常SomeCustomException的except异常处理语句except SomeCustomException:中。
类和继承的概念将在第7章介绍,此处先不深究。
2.抛出异常(引发异常)要显式地触发异常,可以使用raise语句,其一般形式相当简单。
raise语句的组成是: raise 关键字,后面跟着可选的要引发的类或者类的一个实例:raise <class> #创建并抛出类的实例raise <instance># 抛出类的实例对于内置异常,以上两种形式是对等的,都会引发指定的异常类的一个实例,但是,第一种形式隐式地创建实例。
第二个raise形式是最常见的,直接提供一个实例,要么是raise语句中自带的,要么是在raise之前创建的。
【例3-18】输入与输出一个人的姓名、年龄、月收入(输出年收入),根据每个项目的约束条件,人为地引发异常。
在这里约定姓名字符串长度必须大于2小于20,年龄在18~60岁之间,月工资大于800元,否则引发异常。
第9章 异常处理new
Java提供了异常处理机制,在Exception类中定 义了程序产生异常的条件。
对待异常通常并不是简单地结束程序,而是转 去执行某段特殊代码处理这个异常,设法恢复 程序继续执行。
Java实现了C++风格的异常。 当程序中发生异常时,称程序产生了一个异 常事件,相应地生成异常对象。
生成的异常对象传递给Java运行时系统。
SecurityException :违反安全所产生的异常
公ห้องสมุดไป่ตู้异常
Java预定义了一些常见异常,最常用到的有 如下几个。 (1)ArithmeticException 整数除法中,如果除数为0,则发生该类异 常,如: int i = 12 / 0;
(2) NullPointerException 如果一个对象还没有实例化,那么访 问该对象或调用它的方法将导致 NullPointerException异常 如: image im [ ] = new image [4]; System.out.println(im[0].toString())
(5) SecurityException 该类异常一般在浏览器内抛出。
若Applet试图进行下述操作,则由SecurityManager类抛 出此异常: 访问本地文件。 打开一个套接口,而不是返回到提供Applet的主机。 在运行时环境中运行另一个程序。
除此之外,常见异常还有: ArrayStoreException: 程序试图存取数组中 错误的数据类型。 FileNotFoundException: 试图存取一个并 不存在的文件。 IOException: 通常的I/O错误。
例 --捕获算术异常
public class Exception2{ public static void main(String args[]) { try { int x, y; x=15; y=0; System.out.println(x/y); System.out.println("Computing successfully!"); }
