try-except

try:print("step1")a=3/0   #此处会抛出异常print("step2")except BaseException as e:  #捕获异常 BaseException是异常的最大类"""即捕获到BaseException类中的异常类时会将其保存为e,一般将储存信息的变量定义为e"""print("step3")print(e)print("step4")
'''
step1
step3
division by zero    遇到line3的异常后,后续不在执行;捕获到异常后执行except中的语句,然后在执行外部
step4
'''

循环结合异常

while True:try:x=int(input("请输入数字:"))  #如果输入非数字 无法转换成整型会报错print(x)if x==999:break   #循环的break条件except BaseException as e:  #捕获异常print(e)    #输出异常的错误信息

异常处理的else语句

a=input("请输入被除数:")
b=input("请输入除数:")try:a = int(a)b = int(b)    print("商:", a / b)
'''
a与b首先需要是合适的type才能转化为整型
其次b不可以为0,不然会报除数为0的错
'''except BaseException as e:print(e)print(type(e))else:   #没有发生异常才会运行的代码print("程序运行完毕")

多个except语句

#异常处理的本质是 解释器抛出异常->捕获异常->解决异常
'''
输入被除数和除数,输出商会出现2种异常问题
1.输入的字符并不是数字,不能转换为int
2.除数为0解决方法
1.输入后判断isdigit()再判断!=0 但是会导致业务偏移
2.异常处理
'''
a=input("请输入被除数:")
b=input("请输入除数:")
'''
if a.isdigit() and b.isdigit():if int(b) != 0:a=int(a)b=int(b)print("商:",a/b)
'''
try:a = int(a)b = int(b)print("商:", a / b)
except TypeError:print("输入类型有误")
except ZeroDivisionError:print("除数不能为0")
except BaseException as e:   #添加后可以涵盖所有异常,属于父类,父类放在异常捕获的最后print("其他异常")print(e)print(type(e))
#try将可能出现异常的代码放入,except是try内代码出现异常时执行的语句
'''
except (ValueError,Exception,ZeroDivisionError) as e:       将多种异常放在元组中,不需要注意顺序,且可以将异常储存为e输出type
type(e) 获取异常类型
e.args  获取异常信息
'''

常见异常类型

'''
1.SyntaxError
语法错误
2.NameError
尝试访问的变量未申明
3.ZeroDivisionError
除数为0
4.ValueError
数值错误,类型不可以转换 如 int("abc")
5.TypeError
类型错误,如 123+"abc" 两者不是同一类型
6.AttributeError
访问对象不存在的属性 如 a=100 a.say() say没有被定义过
7.IndexError
访问越界,常出现在循环遍历
8.KeyError
字典键不存在
'''

finally

a=input("请输入被除数:")
b=input("请输入除数:")try:a = int(a)b = int(b)print("商:", a / b)except BaseException as e:print(e)print(type(e))finally:    #finally是无论如何都会执行的步骤,部分程序在报错处理后不会继续运行,所以需要finallyprint("程序运行完成")print("end")'''
遇到在自定义方法中需要添加return语句,一律放到整个异常模块外
'''

异常处理的机制

'''
def test1():print(">>>>>test1<<<<<")print(aa)print(">>>>>test1 over<<<<<")
def test2():print(">>>>>test2<<<<<")test1()print(">>>>>test2 over<<<<<")
def test3():print(">>>>>test3<<<<<")test2()print(">>>>>test3 over<<<<<")test3()
以上运行结果为:
Traceback (most recent call last):File "D:\Python practice\基本知识结构\异常处理机制.py", line 14, in <module>test3()File "D:\Python practice\基本知识结构\异常处理机制.py", line 11, in test3test2()File "D:\Python practice\基本知识结构\异常处理机制.py", line 7, in test2test1()File "D:\Python practice\基本知识结构\异常处理机制.py", line 3, in test1print(aa)
NameError: name 'aa' is not defined
#>>>>>test3<<<<<
#>>>>>test2<<<<<
#>>>>>test1<<<<<先在外部调用了test3,走完第一个print以后调用test2,在test2里先进行一个print,调用test1,test1进行一次print后遭遇异常,不会继续执行
遭遇异常后,解释器会寻找是否有异常处理的方式被定义过,由调用的顺序进行查找,可以找到调用的逻辑顺序是test3-test2-test1-print(aa) 异常处理的逻辑也是由此执行
'''def test1():print(">>>>>test1<<<<<")print(aa)print(">>>>>test1 over<<<<<")
def test2():print(">>>>>test2<<<<<")test1()print(">>>>>test2 over<<<<<")
def test3():print(">>>>>test3<<<<<")try:test2()except:passprint(">>>>>test3 over<<<<<")test3()
'''
>>>>>test3<<<<<
>>>>>test2<<<<<
>>>>>test1<<<<<
>>>>>test3 over<<<<<
此时不会报错,在中间调用插入try,可以使得异常处理机制向逻辑调用前端查询时被pass掉,无视该调用的异常,但是也会使得后续语句不执行
'''

自定义异常、raise抛出异常

#自定义异常类
class AgeError(Exception):def __init__(self,errorinfo):super(AgeError,self).__init__()     #所有自定义类都需要调用父类的self定义self.errorinfo = errorinfodef __str__(self):return str(self.errorinfo)+",年龄输入错误"'''__main__.AgeError: 180,年龄输入错误   抛出的错误信息'''if __name__ == "__main__":    #如果是True,该模块是作为独立文件执行,一般用于测试age = int(input("请输入年龄:"))if (age<1 or age>150):raise AgeError(age)     #需要用到raise来抛出自定义的异常类else:print("年龄是{0}".format(age))

文档相关的异常处理

'''
try:
except 异常 as 变量:
else:没有异常执行的代码
finally:最终一定要执行的代码
'''
try:file = open("123.txt","w+",encoding="utf-8")file.write("Hello\n")file.write("World")file.write([1,2,3]) #此处会异常,因为write只能写入字符串,writelines才能写入字符串列表except Exception as e:print(e.args)else:print("写入完毕")print("无异常")    #无异常时才会执行finally:file.close()    #close一定要放在finally中保证能够清空缓冲区,并关闭文件print("end...")

traceback生成异常日志

import traceback    #要使用traceback 需要导入模块
try:a=3/0
except:with open("D:\\Python practice\\基本知识结构\\异常\\异常日志.txt","a") as f:'''因为异常日志是自动运行时同时运作的,所以采用能自动管理资源的with语句"a"是append 与写不同,因为是新增内容'''traceback.print_exc(file = f)

with的应用

#在打开资源的情况下使用with,其他情况依然是finally
try:f = open("D:/Python practice/基本知识结构/异常/aaa.txt","r")    #open("文档的绝对路径","读或写(w or r)")content = f.readline()print(content)
except BaseException as e:print(e)print(type(e))
finally:print("closing file...")f.close()       #文件打开后必须关闭
'''
代码给到os(系统)操作命令,在硬盘中打开文档,一定要记得使用完毕,传输close命令
绝对路径标识 "/"或者"\\"
'''
print("with代码块比较>>>>>>>>>>>>>")with open("D:/Python practice/基本知识结构/异常/aaa.txt","r") as f:content = f.readline()print(content)
'''
with会进行自动的上下文管理,不论是否有异常都会自动释放资源即close
在有文档操作的情况下with可以替代一整个Try代码块
'''

Python学习——异常相关推荐

  1. python学习-异常(异常类型,异常处理、自定义异常)

    文章目录 python标准异常 异常处理 自定义异常 python标准异常 异常就是影响程序正常执行的一个事件. 某一行代码发生异常,程序就退出了,后续代码都不会执行. 异常名称 描述 BaseExc ...

  2. python学习笔记(九)——文件和异常(重点)

    学文件的目的:数据不能可能一直在内存中存储,持久化存储到磁盘就需要用到文件了! 一.文件和上下文管理器(重点) 1.打开文件-open() 方法 Python open() 方法用于打开一个文件,并返 ...

  3. Python+Selenium学习--异常截图

    Python+Selenium学习--异常截图 参考文章: (1)Python+Selenium学习--异常截图 (2)https://www.cnblogs.com/uniquefu/p/97191 ...

  4. Python学习笔记Task07(异常)

    Python学习笔记Task07(异常) 2.try-except语句 try 语句按照如下方式工作:l 首先,执行try子句(在关键字try和关键字except之间的语句l 如果没有异常发生,忽略e ...

  5. 史上最全Python学习笔记(基于《Python学习手册(第4版)》)——Part7 异常和工具

    文章目录 Chap32 异常基础 为什么使用异常 异常的角色 异常处理:简明扼要 默认异常处理器 捕获异常 引发异常 用户定义的异常 终止行为 Chap33 异常编码细节 try/except/els ...

  6. 《转》Python学习(16)-python异常

    转自 http://www.cnblogs.com/BeginMan/p/3171445.html 一.什么是错误,什么是异常,它们两者区别 这里解释如下:个人觉得很通俗易懂 错误是指在执行代码过程中 ...

  7. Python学习笔记之异常

    Python用异常对象来表示异常情况,如果异常对象未被处理或捕捉,程序就会回溯(traceback)中止执行. 异常可以在出错时自动引发,也可以主动引发. 异常被引发后如果不被处理就会传播至程序调用的 ...

  8. 我的python学习(五)文件操作、异常捕获

    读写.创建文件 文件的分类: 文本文件:基于字符编码,存储的是普通字符串,不包括字体.字号.样式.颜色等信息,可通过文本编辑器显示和编辑,例如txt文件: 二进制文件:基于值编码的,以字节形式存储,其 ...

  9. Python学习系列之错误和异常

    一.错误和异常 Python 中(至少)有两种错误:语法错误和异常( syntax errors 和 exceptions ). 1.1 错误 (1)语法错误,也被称作解析错误,无法通过python解 ...

最新文章

  1. 从NCBI当中SRA数据库中下载高通量测序数据
  2. 通用数据级别权限的框架设计与实现(4)-单条记录的权限控制
  3. Oracle database 安装在 Linux(rhel,oel,centos)上的用户设置
  4. 【数理知识】《数值分析》李庆扬老师-第7章-非线性方程与方程组的数值解法
  5. Windows 7 版本知多少(Win 7 N/K/KN/E)
  6. 国内初创企业选择云计算服务器价格对比
  7. 了解播放过滤器API
  8. 前端学习(2816):原生框架目录结构
  9. Image inpainting 图像修补最新综述
  10. Ubuntu安装sysv-rc-conf配置开机启动服务
  11. 谷歌造了个虚拟足球场,让AI像打FIFA一样做强化学习训练丨开源有API
  12. 优秀ASP.NET程序员的修炼之路(转)
  13. 通达信接口的开发工具?
  14. 计算机应用技术需要学数学吗,学计算机应用技术能不学数学吗?
  15. 淘宝客返利网的实现方法
  16. 【加密算法】凯撒密码的原理及Python实现
  17. mysql中vlookup函数_数据库合并函数vlookup介绍
  18. 精简我们的apk的方法
  19. 求GARCH-MIDAS和DCC-GARCH代码
  20. C语言中设置文字颜色

热门文章

  1. 华为鸿蒙os 新闻,华为P50无限延期,谁来组成华为鸿蒙OS“头部”?
  2. 基矢量的协变导数、矢量的协变导数
  3. 计算机安全法的发行日期,网络安全法实施时间,网络安全法是什么时候实施的?...
  4. 3.额外器件-光场相机
  5. 太阳辐照度的测量——基于51单片机
  6. C/C++ 搜索缝隙并插入ShellCode
  7. AcWing1293. 夏洛克和他的女朋友
  8. [喜闻乐见]期末尻♂总结
  9. 基于内容的图片检索CBIR(Content Based Image Retrieval)简介
  10. labview界面设计之颜色使用(转)