Python超级详细的提升用法

2024-11-02 06:44:25

1、当程序出现错误时,系统会自动抛出异常。此外,python还允许程序抛出自己的异常,这可以使用raise语句完成。大多数情况下,系统是否会导致异常可能取决于应用程序的业务需求。如果程序中的数据和执行不能满足既定的业务需求,这是一个例外。与业务需求不一致导致的异常必须由程序员提出。系统无法引发此异常。如果您需要自己在程序中抛出异常,那么应该使用raise语句。加薪声明有以下三种常见用法:加薪:单次加薪。此语句引发当前上下文中捕获的异常,例如异常块中的异常,或者默认情况下引发runtimeerror异常。引发异常类:引发后接异常类。此语句引发指定异常类的默认实例。引发异常对象:引发指定的异常对象。以上三种用法最终会引发一个异常实例(即使指定了异常类,它实际上也是该类的默认实例)。raise语句一次只能引发一个异常实例。您可以使用raise语句重写用于处理前一个五子棋游戏中用户输入的代码

Python超级详细的提升用法

2、上面程序的第七行使用raise语句引发异常。程序认为,当用户试图下棋到现有棋子的坐标点时,这是一个例外。当Python解释器接收到开发人员提出的异常时,它也会中止当前的执行流程,跳转到异常对应的异常块,异常块将处理异常。也就是说,无论异常是由系统自动抛出还是由程序员自动抛出,Python解释器对异常的处理没有区别。即使是用户生成的异常,也可以使用try exception来捕获它。当然,如果异常被传递给解释器,那么就让解释器先把异常传播给它。以下示例演示了处理用户引发异常的两种方法:

Python超级详细的提升用法

3、从上面的程序可以看出,在调用MTD(3)时,程序可以使用try exception来捕捉异常,这样异常会被异常块捕获,不会传播到调用它的函数;也可以直接调用MTD(3),它的函数的异常将被直接传播。如果函数不处理异常,它将导致程序停止。运行上述程序,可以看到以下输出结果:

Python超级详细的提升用法

4、上面的第一行输出是对M哌囿亡噱TD(3)的第一次调用的结果,此方法引发的异常由异常块捕获并处理。后一个大输出是第二次调用MTD(3)的结果。由于异常块没有捕捉到异常,它会向上传播,直到传递到Python解释器,导致程序停止。对MTD(3)的第二次调用触发了以“file”开头的三行输出,这实际上显示了异常的传播跟踪信息。换句话说,如果程序不处理异常,python默认会在控制台中输出异常的传播跟踪信息。自定义异常类很多时候,程序可以选择抛出自定义异常,因为异常的类名通常包含有关异常的有用信息。因此,当抛出异常时,应该选择适当的异常类,以便能够清楚地描述异常。在这种情况下,应用程序通常需要抛出自定义异常。用户定义的异常应该继承异常基类或异常的子类。定义异常类时不需要编写更多代码,只要指定用户定义的异常类的父类即可。以下程序创建自定义异常类(程序1)

Python超级详细的提升用法

5、上面的程序创建auct坡纠课柩ionException异常类,它不需要类主体定义,所以使用pass语句作为占位符。在大多数情况下,创建自定义异常类可以通过使用类似于Program1的代码来完成。只需更改异常的类名,这样异常的类名就可以准确地描述异常。同时使用except和raise在实际应用中,可能需要更复杂的方法来处理异常。当一个异常发生时,不能用单一方法完全处理,必须由多个方法协同处理。换句话说,在发生异常的当前方法中,程序只对异常进行部分处理,而一些处理需要在方法的调用方中完成。因此,应该再次抛出异常,以便方法的调用方能够捕获异常。为了实现这种情况,我们可以使用异常块中的raise语句来协同处理同一个异常。以下过程演示了同时使用except和raise的方法:

Python超级详细的提升用法

6、在上述程序中9~13行代码对应的异常块捕捉到异常后,系统打印异常的字符串信息,然后引发auctionException,通知调用方再次处理异常的方法。因此,程序中main()函数的调用方,即bid()方法,可以再次捕获异常并打印出异常的详细描述。异常与提升的结合在实际应用中非常普遍。在实际应用中,对异常的处理分为两个部分应用后台需要通过日志记录异常的详细信息;应用程序还需要根据异常情况向应用程序用户传递一些提示;在这种情况下,所有的异常都需要通过这两种方法来完成,所以我们必须同时使用exception和raise。如果程序需要直接传播原始异常的详细信息,只要将上面的代码1改为以下形式,python还允许用户定义的异常包装原始异常:

Python超级详细的提升用法

7、Raise不需要参数如前所述,可以使用不带参数的raise语句。此时,raise语句位于异常块中,它将自动引发由当前上下文激活的异常;否则,默认情况下通常会引发运行时错误异常。例如,将上述程序更改为以下形式:

Python超级详细的提升用法

8、从13行代码中可以看到,程序只使用异常块中的raise语句抛出异常,raise语句将再次抛出异常块捕获的异常。运行该程序,可以看到以下输出结果:

Python超级详细的提升用法

9、从输出中,main()函数再次捕获valueerror,这是在bid()方法的except块中捕获的原始异常。

猜你喜欢