0


Python 异常处理 try-except,else,finally, with 语句的区别

在日常编写程序时,难免会遇到错误,有的是由于疏忽造成的语法错误,有的是程序内部隐含逻辑问题造成的数据错误,还有的是程序运行时与系统的规则冲突造成的系统错误,等等。

总的来说,编写程序时遇到的错误可大致分为 2 类,分别为语法错误和运行时错误。

Python语法错误

语法错误,也就是解析代码时出现的错误。当代码不符合 Python 语法规则时,Python解析器在解析时就会报出 SyntaxError 语法错误。

例如:print ‘Today is Friday’

由于 Python 3版本 已经不再支持这种省略写法,所以在运行时,解析器会报错: SyntaxError: Missing parentheses in call to ‘print’

Python运行时错误

运行时错误,也就是程序在语法上都是正确的,但在运行时发生了错误。

例如: print ( 1/0 )

由于 分母为0 时没有意义,所以在运行时,解析器会报错: ZeroDivisionError: division by zero

当一个程序发生异常时,代表该程序在执行时出现了非正常的情况,无法再执行下去。默认情况下,程序是要终止的。如果要避免程序退出,可以使用捕获异常的方式获取这个异常的名称,再通过其他的逻辑代码让程序继续运行,这种根据异常做出的逻辑处理叫作异常处理。

在 Python 中,把这种运行时产生错误的情况叫做异常(Exceptions),常见的异常类,如下图 :

在这里插入图片描述
try, except 的用法

例1 :

当 num1 输入 a 或者其他字母时,解析器检测到输入了一个无效的数字时,就会执行 except 后的代码块(语句),如下图:

在这里插入图片描述

例2:

当num2 输入0时,解析器检测到分母为 0,执行except 后的代码块。
(1) 首先执行 print(‘the second number cannot be zero!’)
(2) 抛出异常,输出异常提示 如下图:

在这里插入图片描述

例3 :

当 except 不带异常类名,无论出现什么异常,都会执行后面的语句,如下图:

在这里插入图片描述

例4 :

except 加上 Exception (常规异常的类) 出现什么异常,就输出什么异常提示。

当 num2 为 0时,检测到分母为0,执行后面语句,并输出异常提示。
当 num1 为 a时,检测到输入无效数字,执行后面语句,并输出异常提示。

如下图:

在这里插入图片描述

例5 :

多个 except 语句: 当符合哪种异常,就执行相对应的语句, 如下图:

在这里插入图片描述

例6 :

一个except 块捕捉多个异常,当符合指定异常类时,执行后面的语句,如下图:

在这里插入图片描述

try … except & else 的用法

当检测到有异常时,会直接输出异常提示。

如果没有异常,输出结果以及 else 后的代码块(语句)。

如下图:

在这里插入图片描述

try … except & finally 的用法

无论是否遇到异常,最后都会执行 finally后的代码块(语句),如下图:

在这里插入图片描述
try … except & finally,打开文件(以 txt为例) 的用法

当打开一个不存在的文件时,会执行 IOError 后的代码块(语句)。

由于finally 后的 file 无定义,因此当执行file.close()时,就会报错,而后面: print(‘testing is finished’) 的语句并没有执行。 如下图1:

注: 由于indentation,因此finally 里的 file 和 try 里的 file 不一样。

如果把 finally 后代码块里的语句调转,就会先执行print(‘testing is finished’) 的语句,最后直接显示报错,入下图2:

打开 txt,为跳过不必要的报错,用 with open 语法,可以省去 file.close() 如下图3

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总结: try语句必须有一个except或一个finally,else是可选的,但是如果有else,则必须至少有一个except。

标签: python

本文转载自: https://blog.csdn.net/weixin_48591974/article/details/116485107
版权归原作者 冯大少 所有, 如有侵权,请联系我们删除。

“Python 异常处理 try-except,else,finally, with 语句的区别”的评论:

还没有评论