主要内容:
- 小目标:异常处理
- 主要内容:错误与异常,try_except语句
对于撸代码的程序员来说,程序运行中出现问题是常见的现象;
实际学习与工作中,我们会花很大的精力去解决各种问题;
1. 程序中问题:
Python中出现问题,主要分为下面几种:
代码编写问题,比如:语法错误;
程序运行时异常,比如:除0错误,序列越界错误;
计算机硬件错误,比如:磁盘损坏,网络异常等;
程序逻辑问题,比如:死循环,算法问题等;
如何解决以上问题:
语法问题,python解释器会检查;
程序运行时异常,程序直接停止运行,并报出异常;
硬件问题:检查硬件
逻辑问题:通过单步调试或者print信息通过代码检查;
这里我们主要讲解程序运行时异常。
2. 语法问题:
常见语法错误:
- 例1:
if a > 10 pass
结果:
File "", line 1 if a > 10 ^SyntaxError: invalid syntax
分析:python解释器输出信息,第一行,语法错误;
- 例2:
a = 10if a > 10: pass pass
结果:
File "", line 4 pass ^IndentationError: unexpected indent
分析:缩进问题;
3. 常见异常:
例1:
if b > 10: pass
结果,变量b没有定义:
NameError Traceback (most recent call last) in ----> 1 if b > 10: 2 passNameError: name 'b' is not defined
例2:
int('c')
结果,字符串转整数错误:
ValueError Traceback (most recent call last) in ----> 1 int('c')ValueError: invalid literal for int() with base 10: 'c'
- 分析:
遇到异常问题,查看解释器报错;
找到问题所在行,分析并解决问题;
问题:某些情况下程序出现异常,
我们并不希望程序终止运行:例如:
网络抖动,希望重试几次;
数据库查找异常,可以跳过继续查找;
读取配置文件,IO错误,可以使用默认配置....
4. 异常处理
4.1 try/except语句
Python中可以使用try/except解惑处理异常,例如:
try: if b > 10: pass print("run here 1")except Exception as e: print("Error:", e)print("run here 2")
结果:
Error: name 'b' is not defined
从结果中可以看到,程序并没有因为变量b没有定义而停止运行
- 分析:
try/except用来处理异常;
若程序没有异常,执行完try中的代码段;
若程序在try代码段出现异常,try语句截获异常,停止当前代码段执行,去执行except中代码
问题:如何只处理指定异常?
4.2 except:
except后面可以添加为指定异常类型;
常见的异常类型:
下面我们指定异常:
try: if b > 10: pass print("run here 1")except IOError as e: print("Error:", e)print("run here 2")
结果:异常处理并未生效
程序中设置捕获异常为:IOError;
程序中触发异常为NameError,try/except并不对此异常进行处理;
对比:Exception为异常基类,可以捕获所有异常;
1 try:----> 2 if b > 10: 3 pass 4 print("run here 1") 5 except IOError as e:NameError: name 'b' is not defined
4.3 try/except设置捕获多个异常:
使用多个except指定异常,直接上代码:
try: if b > 10: pass print("run here 1")except IOError as e: print("IOError:", e)except NameError as e: print("NameError:", e)print("run here 2")
结果,捕获到了NameError:
NameError: name 'b' is not definedrun here 2
4.4 不能处理的错误:
例如,语法错误
try: if b>10 passexcept Exception as e: pass
结果:Python解释器首先检查语法问题,程序尚未运行,所以不能处理语法错误:
if b>10 ^SyntaxError: invalid syntax
4.5 try/finally
基本语法:
try: passexcept: passfinally: pass
程序是否遇到异常,都会执行finally语句,一般finally中用于释放资源;
- 例1:程序中无异常
try: b = 20 if b>10: passexcept Exception as e: print("Error:", e)finally: print("finally")
结果:finally
- 例2:程序中出现异常
try: if d>10: passexcept Exception as e: print("Error:", e)finally: print("finally")
结果:
Error: name 'd' is not definedfinally
以上就是Python中异常处理方式。
总结:
理解错误与异常;
掌握try/except/finally语句;
try/except不能处理语法错误