Python基础总结之异常、调试代码第十二天开始(新手可相互督促)

年薪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...  这样的方法来捕获异常,和处理异常。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

原文地址:https://www.cnblogs.com/woshidaliua/p/11291028.html

时间: 2024-11-05 13:35:53

Python基础总结之异常、调试代码第十二天开始(新手可相互督促)的相关文章

python基础===如何优雅的写代码(转自网络)

本文是Raymond Hettinger在2013年美国PyCon演讲的笔记(视频, 幻灯片). 示例代码和引用的语录都来自Raymond的演讲.这是我按我的理解整理出来的,希望你们理解起来跟我一样顺畅! 遍历一个范围内的数字 for i in [0, 1, 2, 3, 4, 5]: print i ** 2 for i in range(6): print i ** 2 更好的方法 for i in xrange(6): print i ** 2 xrange会返回一个迭代器,用来一次一个值地

Python基础之(异常与开发规范)

一.异常 1.1.Python中错误分为两种: 语法错误,这种错误根本过不了python解释器的语法检测,必须在程序执行前就改正 逻辑错误,如int("m") 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下: python中异常的种类: 1 #常用异常 2 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 3 IOError

【Python】 vscode使用code-runner 调试代码

插件名称: code-runner 插件设置: "code-runner.executorMap": { "python" : "set PYTHONIOENCODING=utf8 && python", "php":"php", "node": "node", "java": "cd $dir && ja

python 基础学习--循环语句--附代码

1:利用for循环,完成a=[1,7,4,89,34,2]的冒泡排序(冒泡排序:小的排前面,大的排后面.) a = [1, 7, 4, 89, 34, 2] for i in range(len(a) - 1): for j in range(len(a) - i - 1): if a[j] > a[j + 1]: a[j], a[j + 1] = a[j + 1], a[j] print(a) 2:输出99乘法表 for i in range(1, 10): list_1 = [] for j

Python基础总结之第九天开始【python之OS模块对目录的操作、以及操作文件】(新手可相互督促)

年薪20万的梦想...         python对文件.目录能做什么?或者说我们需要python替我们做什么?最经常的操作就是对文件的:打开.关闭.读取.写入.修改.保存等等对目录的操作,无非就是:创建目录.删除目录.更改目录名字等等.我们先认识一下OS模块,os模块以及子模块path中包含了获取系统信息.以及对系统进行设置的函数.提供了Python系统和操作系统进行交互的一个接口.我们怎么使用os模块中的函数呢?看下代码: 1 import os #导入os模块 我们输入这样一行代码,就代

Python基础总结之第八天开始【while循环以及for循环,循环嵌套等循环相关的知识点】(新手可相互督促)

ennnnn,年薪20万的梦想是不是又进了一步: 循环,什么是循环,循环就是电池有电,手机屏幕可以循环一整天的使用:循环就是地球不毁灭,太阳日复一日的出现...... 不接受反驳,谢谢!~ 只要条件满足,就不断循环,条件不满足,退出循环... while 循环语法结构:(什么是条件判断?请看随笔目录,if条件判断相关笔记) 1 while 条件表达式: #条件成立,执行下面的循环体代码2 循环体 我们开始一个简单的例子:(假若条件一直成立,那么会一直循环,就是所谓的,根本停不下来的,死循环) 1

Python基础总结之初步认识---class类的继承(下)。第十五天开始(新手可相互督促

年薪百万的步伐慢了两天hhhh严格意义是三天.最近买了新的玩具,在家玩玩玩!~~~~ 今天开始正式认识类的继承.类的继承是怎么继承呢?看下代码: 1 class Animal(object): #父类 2 def __init__(self,name): #构造函数的参数 3 self.name = name #实例属性 4 5 class Dog(Animal): #子类(父类) 表明谁继承了谁的所有属性和方法 pass 在上面的代码中,父类的名字是:Animal   子类的名字是:Dog  

Python 基础教程

Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.像Perl语言一样, Python 源代码同样遵循 GPL(GNU General Public License)协议.现在开始学习 Python! 谁适合阅读本教程?本教程适合想从零开始学习Python编程语言的开发人员.当然本教程也会对一些模块进行深入,让你更好的了解Python的应用. 学习本教程前你需要了解在继续本教程之前

python基础教程_学习笔记10:异常

异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行: >>> 1/0 Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 1/0 ZeroDivisionError: integer division or modulo by