3
从图中可以看出,异常是从thirdmethod()函数触发的,传递给secondmethod()函数,然后传递到firstmethod()函数,最后传递到main()函数。在main()函数的末尾,这个过程是python异常传播路径。在实际应用程序开发中,大多数复杂操作被分解为一系列函数或方法调用。这是因为,为了具有更好的可重用性,每个可重用的代码单元都被定义为一个函数或方法,并且将复杂的任务逐步分解为更易于管理的小子任务。由于一个大的业务功能需要由多个函数或方法来实现,在最终的编程模型中,许多对象都会通过一系列函数或方法调用来通信和执行任务。因此,当应用程序运行时,往往会发生一系列的函数或方法调用,从而形成“函数调用战”。相反,只要异常没有被完全捕获(包括没有捕捉到异常,或者异常被处理后重新抛出),异常就会逐渐从发生异常的函数或方法传播到函数或方法的调用方,然后传播到调用方,最后到python解释器,在这种情况下python解释器将停止程序并打印异常的传播跟踪信息。许多初学者看到图1所示的异常提示信息时会惊慌失措。他们认为程序中有许多严重的错误。事实上,只有一个错误。系统提示这么多行信息,只是为了显示依次触发的异常轨迹。实际上,图中显示的异常传播跟踪信息非常清晰,它记录了应用程序中的执行停止点。最后一行详细说明了异常的类型和异常的详细信息。从这一行开始,它依次记录异常的来源、异常传播的轨迹,并指出异常发生在哪个文件、哪一行和哪个函数中。Python提供了回溯模块来处理异常传播跟踪。回溯可以方便地处理Python异常传播跟踪。导入回溯模块后,回溯提供以下两种常用方法:回溯.打印Exc():将异常传播跟踪信息输出到控制台或指定文件。format_Exc():将异常传播跟踪信息转换为字符串。一些读者可能会好奇,上面的方法看不到它们处理的异常传播跟踪信息。实际上,我们经常使用print_xc()是print_xc(limit,file)省略了limit和file的形式。而print_xexc(limit,file)的完整形式是print_uexception(etype,value,TB,limit,file),在full form中,前三个参数分别用于指定异常的以下信息:Etype:指定异常类型;Value:指定异常值;TB:指定异常的回溯信息;当程序在异常块中时,可以通过sys对象获取异常块捕获的异常信息,其中系统exc类型系统exc价值系统exc回溯表示当前异常块中异常的类型、值和跟踪。简而言之,print_xc(limit,file)相当于以下形式: