年薪20万的梦想,加油!

我们在写代码的时候,控制台经常会报错,因为某种错误,导致我们的程序停止,且不再运行下面的代码。

我们看一个错误的代码示例:

def add_1():     #没有参数
print('我出错了') #不会被执行 def add_2(): #函数二调用函数一
print('第二个函数调用函数一,并给他一个参数')
add_1(4) #函数一没有参数,所以有会报异常,并终止,不会执行函数一里面的代码 def add_3(): #函数三调用函数二
add_2() d = add_3() #调用函数三

看完截图,可以理解在函数调用的路径中,控制台显示的调用过程很清晰,这个过程就是函数调用栈的概念,它可以直接找到出错的地方。因为定义的函数add_1,不需要任何参数。

但是在调用的时候传入了一个参数值4,所以导致了程序停止,函数add_1里面的print语句没有被执行。

当我们在控制台看到Traceback出现,就说明程序有异常出现,异常就是最下面的TypeError。它只是异常的一种,如果我们没有对异常进行捕获处理,程序就会停止,且后面的代码都不会再执行。

我们可以使用   try...except...finally...  这样的方法来捕获异常,和处理异常。

 def add_1():     #不需要传入参数
print('我出错了') #不会被执行 def add_2(): #函数二调用函数以
print('第二个函数调用函数一,并给他一个参数')
try:
add_1(4) #我们知道在这里,传参的时候会导致错误,所以我们在这里捕获异常。
except : #except 后面不添加任何错误类型,表示捕获所以异常类型。再不知道是什么类型的异常,导致程序停止,可以用它来处理。
print('捕获了所有异常,不论什么异常导致') def add_3():
add_2()
d = add_3() #调用函数三

当我们不知道哪里异常的时候,我们可以将try...except...的范围先放大,然后慢慢缩小。

 try:
a = ['a','b',1,2] #创建一个列表,变量是a,指向列表 print(c) #打印出错变量c,会出现一个未声明对象的错误:NameError,代码中的变量c并没有指向任何对象
except TypeError: #TypeError是类型异常的错误,我们捕获的异常和程序出现的异常不一致,所以捕获是不成功的
print('捕获异常')

从图中发现我们捕获的异常和出现的异常不一致,所以异常的捕获是失效的,python 中有很多异常类型,如果不指定用哪个类型的异常捕获,那么就直接用案例一的方法,捕获所有异常,我们可以这样实现代码:

except Exception:     也可以直接写成   except:  不加后面的Exception,也代表捕获所有的异常,两种格式。

 try:
a = ['a','b',1,2] #创建一个列表 print(c) #打印出错变量c,会出现一个未声明对象的错误:NameError,因为列表的变量是a
except Exception: #Exception,代表捕获所有类型的异常
print('捕获所有类型的异常')

如果我们程序运行到这里的时候,我们知道一般会出现哪几种情况,我们可以连续使用几个except代码块儿,分别捕获不同的异常。当执异常产生了,并且出现的异常类型是我们捕获的except代码块儿中的一个类型,那么所捕获的错误类型就会执行相应的代码,而不是对应的该异常的代码块,因为捕获的异常类型不匹配,所以它们对应的代码不会被执行。

 try:
a = ['a','b',1,2] #创建一个列表 print(c) #打印出错变量c,会出现一个未声明对象的异常报错:NameError,因为列表的变量是a except TypeError:
print('捕获 TypeError 类型异常')
except NameError: #捕获NameError类型异常
print('捕获 NameError 类型异常')

我们知道了代码停止运行的异常类型,我们才能根据异常的类型去修改调试我们的代码。接下来我们再看看finally语句。finally语句,不管是否有异常,我们都有执行一段代码,比如,即使读取文件出现异常,那么我们也要执行后面的代码,那么我们就可以用finally这个关键字实现。

 import os                                   #导入os模块
try:
os.chdir(r'C:\Program Files\tools') #切换到指定的路径目录
print(os.listdir(os.getcwd())) file_1= open(r'C:\Program Files\tools\ffff.txt') #我们的目录中没有ffff.txt文件 except FileNotFoundError: #捕获未找到文件的异常报错
print('未找到文件 FileNotFoundError') finally: #但是下面的代码我们还是想执行
print('为了证明执行力finally的代码')

捕获异常的初级使用方法大概就是这样捕获了。下面附上常见的异常类型, 多多敲击代码,出错后要尝试根据错误的提示,去修改代码,这也是一种成长~~~~~

    1.AssertionError:当assert断言条件为假的时候抛出的异常

  2.AttributeError:当访问的对象属性不存在的时候抛出的异常

  3.IndexError:超出对象索引的范围时抛出的异常

  4.KeyError:在字典中查找一个不存在的key抛出的异常

  5.NameError:访问一个不存在的变量时抛出的异常

  6.OSError:操作系统产生的异常

  7.SyntaxError:语法错误时会抛出此异常

  8.TypeError:类型错误,通常是不通类型之间的操作会出现此异常

  9.ZeroDivisionError:进行数学运算时除数为0时会出现此异常

最新文章

  1. ubuntu 14.04 修改网络配置
  2. CentOS增加swap分区
  3. [ACM_图论] 棋盘问题 (棋盘上放棋子的方案数)
  4. Erlang 虚拟机 BEAM 指令集之内存管理相关的指令
  5. Linux安装telnet
  6. hdu 1576 求逆元
  7. apache下ab.exe使用方法。。
  8. STSdb
  9. 如何将angularJs项目与requireJs集成
  10. 关于C51中“大小端存储”问题的详解
  11. 七天来学习ASP.NET MVC (两)——ASP.NET MVC 数据传输
  12. Win10 & Linux Docker 安装使用
  13. 如何通过navigator.userAgent判断是哪款浏览器?
  14. Angular中的服务的使用
  15. JConsole观察分析Java程序的运行状态
  16. tensorflow-安装
  17. 1. Ubuntu下MongoDB的安装和使用
  18. MVC中通过ajax判断输入的内容是否重复(新手笔记,请各位多多指教)
  19. 让span对宽度有响应而且兼容多种浏览器
  20. java jdbc深入理解(connection与threadlocal与数据库连接池和事务实)

热门文章

  1. 【docker学习二】CentOS7.5+Docker 镜像(容器)的使用
  2. Sole跟Tomcat的整合 Solr4.4 + Tomcat
  3. 【Linux】一步一步学Linux——虚拟机简介和系统要求(04)
  4. 安装R和Rstudio后,Rstudio出现空白和fatal error问题
  5. MySql EF事务using不会自动 Rollback的bug
  6. 我是这么学习Selenium元素定位操作的
  7. Android 蓝牙开发(2)——低功耗蓝牙
  8. vue的基本用法和指令
  9. .Net知识大全(个人整理)
  10. 阿里云体验:安装jdk