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... 这样的方法来捕获异常,和处理异常。
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时会出现此异常
Python基础总结之异常、调试代码第十二天开始(新手可相互督促)的更多相关文章
- Python基础总结之第二天从变量开始(新手可相互督促)
hhh 为年薪20万加油ヾ(◍°∇°◍)ノ゙ 一.变量:(变量的命名规则:一般使用字母开头,可以使用下划线连接,以及数字) 正确的变量命名示范: (尽量使用容易理解什么用途的词语) a1 na ...
- Python基础+模块、异常
date:2018414+2018415 day1+2 一.python基础 #coding=utf-8 #注释 #算数运算 +(加) -(减) *(乘) /(除) //(取整) %(取余) ...
- python基础之内置异常对象
前言 什么叫异常?简单来说就是程序运行发生了预计结果之外的情况从而导致程序无法正常运行.而python解释器将一些常见的异常情况在它发生时打包成一个异常对象,我们可以通过捕捉这些异常对象从而进行处理, ...
- Python基础:23异常
一:概述 1:错误 错误有语法和逻辑上的区别.语法错误指示软件的结构上有错误,导致不能被解释器解释或编译器无法编译.这些错误必须在程序执行前纠正.逻辑错误可能是由于不完整或是不合法的输入所致,还可能是 ...
- 【Python基础】之异常
一.常见异常 try: open('abc.txt','r') except FileNotFoundError: print('异常啦!') 输出结果: ======= 异常啦! 我们通过 open ...
- python基础--小数据池,代码块的最详细、深入剖析
本文转至太白金星 一,id,is,== 在Python中,id是什么?id是内存地址,那就有人问了,什么是内存地址呢? 你只要创建一个数据(对象)那么都会在内存中开辟一个空间,将这个数据临时加在到内存 ...
- Python基础之模块+异常
一.模块相关概念 1.定义:包含一系列数据.函数.类的文件,通常以.py结尾. 2.作用:让一些相关的数据,函数,类有逻辑的组织在一起,使逻辑结构更加清晰.有利于多人合作开发. 3.模块导入方式(三种 ...
- python基础之错误、调试(异常处理)
在程序运行过程中,总会遇到各种各样的错误. 有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的. 有的错误是用户输入造成的,比如让用 ...
- python基础===如何优雅的写代码(转自网络)
本文是Raymond Hettinger在2013年美国PyCon演讲的笔记(视频, 幻灯片). 示例代码和引用的语录都来自Raymond的演讲.这是我按我的理解整理出来的,希望你们理解起来跟我一样顺 ...
随机推荐
- 【静态NAT】 为什么子网可以ping父网,但是父网ping不通子网?
为什么子网可以ping父网,但是父网ping不通子网? 这就好比在公网中ping一个192.168.0.x的子网,roter无法找到这个子网的地址,所以会把package丢掉. 如何解决呢,可以在路由 ...
- MyBatis从入门到精通(四):MyBatis XML方式的基本用法之增删改
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 1. insert用法 1.1 简单的 ...
- Smobiler实现手机弹窗
前言 在实际项目中有很多场景需要用到弹窗,如图1 那么这些弹窗在Smobiler中如何实现呢? 正文 Smobiler实现弹窗有两种方式:1.MessageBox.Show 2.ShowDialog和 ...
- MySQL性能分析之Explain
目录 Explain基础 Explain进阶 Explain基础 关于explain命令相信大家并不陌生,具体用法和字段含义可以参考官网explain-output ,这里需要强调rows是核心指标, ...
- 用python的matplotlib和numpy库绘制股票K线均线和成交量的整合效果(含量化验证交易策略代码)
在用python的matplotlib和numpy库绘制股票K线均线的整合效果(含从网络接口爬取数据和验证交易策略代码)一文里,我讲述了通过爬虫接口得到股票数据并绘制出K线均线图形的方式,在本文里,将 ...
- 002-pythn基础-循环、编码
1. 循环 while 条件: 代码块(循环体) else: 当上面的条件为假. 才会执行 执行顺序: 判断条件是否为真. 如果真. 执行循环体. 然后再次判断条件....直到循环条件为假. 程序退出 ...
- HDU 2795:Billboard(线段树)
http://acm.hdu.edu.cn/showproblem.php?pid=2795 Billboard Problem Description At the entrance to th ...
- 浅谈iOS需要掌握的技术点
鉴于很多人的简历中的技术点体现(很多朋友问我iOS需要知道注意哪些)! 技术点: 1.热更新 (及时解决线上问题) 2.runtime(json解析.数据越界.扩大button点击事件.拦截系统方法) ...
- ORACLE导入数据库详细步骤
登录PLSQL 点击然后打开命令窗口执行命令 创建表空间(红色字体是你需要创建表空间的地址,蓝色的是表空间大小) create temporary tablespace ZJY_TEMP tempfi ...
- .NET Core 3.0之深入源码理解Kestrel的集成与应用(二)
前言 前一篇文章主要介绍了.NET Core继承Kestrel的目的.运行方式以及相关的使用,接下来将进一步从源码角度探讨.NET Core 3.0中关于Kestrel的其他内容,该部分内容,我们 ...