python中出现提高异常是什么意思

  介绍

这篇文章将为大家详细讲解有关python中出现提高异常是什么意思,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。


编写代码时能否手动抛出一个异常吗?答案是肯定的,python允许程序自行引发异常,使用提高语句即可。基本语法格式为:

raise  [exceptionName [(原因)]]

其中,用[]括起来的为可选参数,其作用是指定抛出的异常名称,以及异常信息的相关描述。如果可选参数全部省略,则提高会把当前错误原样抛出;如果仅省略(原因),则在抛出异常时,将不附带任何的异常描述信息。

也就是说,提高语句有如下三种常用的用法:

1,提高:单独一个提高。该语句引发当前上下文中捕获的异常(比如在除了块中),或默认引发RuntimeError异常。

2,提高异常类名称:提高后带一个异常类名称。该语句引发指定异常类的默认实例。

3,提高异常类名称(描述信息):在引发指定异常的同时,附带异常的描述信息。

上面三种用法最终都是要引发一个异常实例(即使指定的是异常类,实际上也是引发该类的默认实例),提高语句每次只能引发一个异常实例。

例如:

在祝辞的在提高   Traceback  (most  recent  call 最后一个):   File 才能“& lt; pyshell # 1在“,,line  1,拷贝& lt; module>   ,才能提高   RuntimeError: No  active  exception 用reraise   在祝辞祝辞raise  ZeroDivisionError   Traceback  (most  recent  call 最后一个):   File 才能“& lt; pyshell # 0祝辞,,,line  1,拷贝& lt; module>   ,,,raise  ZeroDivisionError   ZeroDivisionError   在祝辞祝辞,raise  ZeroDivisionError(“除数不能为零,)   Traceback  (most  recent  call 最后一个):   File 才能“& lt; pyshell # 2在“,,line  1,拷贝& lt; module>   ,,,raise  ZeroDivisionError(“除数不能为零,)   ZeroDivisionError:除数不能为零之前

注意,即使是用户自行引发的异常,也可以使用试除了来捕获它。当然也可以不管它,让该异常向上(先调用者)传播,如果该异常传到Python解释器,那么程序就会中止。

下面示例示范了处理用户引发异常的两种方式:

def 主要():   ,,,试一试:   ,,,,,,,#,使用试一试……除了来捕捉异常   ,,,,,,,#,此时即使程序出现异常,也不会传播给主函数   ,,,,,,,mtd (3)   ,,,except  Exception  as  e:   ,,,,,,,印刷(& # 39;程序出现异常:& # 39;,,e)   ,,,#,不使用试一试……除了捕捉异常,异常会传播出来导致程序中止   ,,,mtd (3)   def  mtd (a):   ,,,if  a 祝辞,0:   ,,,,,,,raise  ValueError(“一个的值大于0,不符合要求“)   main ()

从上面程序可以看的到,程序既可在调用mtd(3)时使用试除了来捕获异常,这样该异常将会被除块捕获;也可直接调用mtd(3),这样该函数的异常就会直接导致程序中止。

运行上面程序,可以看到如下输出结果:

程序出现异常:一个的值大于0,不符合要求

Traceback  (most  recent  call 最后):   File 才能“C: \ mengma \ \用户桌面\ 1. py",, line  13日,拷贝& lt; module>   ,,,main ()   File 才能“C: \ mengma \ \用户桌面\ 1. py",, line  9日主拷贝   ,,,mtd (3)   File 才能“C: \ mengma \ \用户桌面\ 1. py",, line  12, mtd拷贝   ,,,raise  ValueError(“一个的值大于0,不符合要求“)   ValueError:,一个的值大于0,不符合要求

上面第一行输出是第一次调用mtd(3)的结果,该方法引发的异常被除了块捕获并处理。后面的大段输出则是第二次调用mtd(3)的结果,由于该异常没有被除了块捕获,导致程序中止。

第二次调用mtd(3)引发的以“文件”开头的三行输出,其实显示的就是异常的传播轨迹信息。也就是说,如果程序不对异常进行处理,Python默认会在控制台输出异常的传播轨迹信息。

<强>提高不需要参数

正如前面所看到的,在使用提高语句时可以不带参数,此时提高语句处于除了块中,它将会自动引发当前上下文激活的异常,否则,通常默认引发RuntimeError异常。

例如,将上面程序改为如下形式:

class  AuctionException(异常):通过   class  AuctionTest:   ,,,def  __init__(自我,,init_price):   ,,,,,,,self.init_price =init_price   ,,,def 投标(自我,,bid_price):   ,,,,,,,d  0.0=,   ,,,,,,,试一试:   ,,,,,,,,,,,d =,浮子(bid_price)   ,,,,,,,except  Exception  as  e:   ,,,,,,,,,,,#,此处只是简单地打印异常信息   ,,,,,,,,,,,印刷(“转换出异常:“,,e)   ,,,,,,,,,,,#,再次引发自定义异常   ,,,,,,,,,,,   ,,,,,,,if  self.init_price 祝辞,d:   ,,,,,,,,,,,raise  AuctionException(“竞拍价比起拍价低,不允许竞拍!“)   ,,,,,,,initPrice =d   def  main ():   ,,,at =, AuctionTest (20.4)   ,,,试一试:   ,,,,,,,at.bid (“df")   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

python中出现提高异常是什么意思