在日常编写程序时,难免会遇到错误,有的是由于疏忽造成的语法错误,有的是程序内部隐含逻辑问题造成的数据错误,还有的是程序运行时与系统的规则冲突造成的系统错误,等等。
总的来说,编写程序时遇到的错误可大致分为 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。
版权归原作者 冯大少 所有, 如有侵权,请联系我们删除。