在工作中都会遇到异常报错问题,那么在这抽空码一些内容以作记录。

在python中不同的异常可以用不同的类型(python中统一了类与类型,类型即类)去标识,不同的类对象标识不同的异常,一个异常标识一种错误

AttributeError      #试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x
IOError             #输入/输出异常;基本上是无法打开文件
ImportError         #无法引入模块或包;基本上是路径问题或名称错误
IndentationError    #语法错误(的子类) ;代码没有正确对齐
IndexError          #下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError            #试图访问字典里不存在的键
KeyboardInterrupt   #Ctrl+C被按下
NameError           #使用一个还未被赋予对象的变量
SyntaxError         #Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError           #传入对象类型与要求的不符合
UnboundLocalError   #试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError          #传入一个调用者不期望的值,即使值的类型是正确的
# 其他异常
ArithmeticError
AssertionError
AttributeError
BaseException
BufferError
BytesWarning
DeprecationWarning
EnvironmentError
EOFError
Exception
FloatingPointError
FutureWarning
GeneratorExit
ImportError
ImportWarning
IndentationError
IndexError
IOError
KeyboardInterrupt
KeyError
LookupError
MemoryError
NameError
NotImplementedError
OSError
OverflowError
PendingDeprecationWarning
ReferenceError
RuntimeError
RuntimeWarning
StandardError
StopIteration
SyntaxError
SyntaxWarning
SystemError
SystemExit
TabError
TypeError
UnboundLocalError
UnicodeDecodeError
UnicodeEncodeError
UnicodeError
UnicodeTranslateError
UnicodeWarning
UserWarning
ValueError
Warning
ZeroDivisionError

如何处理异常:

python解释器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行

#一个简单得例子,>>> Print("Hello World")Traceback (most recent call last):File "<stdin>", line 1, in <module>Print("Hello World")
NameError: name 'Print' is not defined

NameError 错误被抛出,同时 Python 还会打印出检测到的错误发生的位置。这就是一个错误处理器

程序运行中的异常可以分为两类:语法错误和逻辑错误。首先,我们必须知道,语法错误跟异常处理无关,所以我们在处理异常之前,必须避免语法上的错误。

使用if判断式可以异常处理,但是if判断式的异常处理只能针对某一段代码,对于不同的代码段的相同类型的错误你需要写重复的if来进行处理。而且在你的程序中频繁的写与程序本身无关,与异常处理有关的if,会使得你的代码可读性极其的差

#我们平时用if做的一些简单的异常处理
num1=input('>>: ') #输入一个字符串试试
if num1.isdigit():int(num1) #我们的正统程序放到了这里,其余的都属于异常处理范畴
elif num1.isspace():print('输入的是空格,就执行我这里的逻辑')
elif len(num1) == 0:print('输入的是空,就执行我这里的逻辑')
else:print('其他情情况,执行我这里的逻辑')
#这些if,跟代码逻辑并无关系,显得可读性极差,如果类似的逻辑多,那么每一次都需要判断这些内容,就会倒置我们的代码特别冗长。

python特定的语法结构捕获异常

#异常捕获 单个分支
try:逻辑代码(被捕获得内容)
except 异常类型:检测到异常,就执行这个位置的逻辑# 多个分支捕获
# 单分支只能用来处理指定的异常情况,如果未捕获到异常,则报错
try:abc()
except ValueError:print('异常输出')
except IndexError:print('异常输出')# Exception 属性可以捕获任意异常,不过它是一把双刃剑,有利有弊,我们要视情况使用
try:abc()
except Exception as e:print(e)检测到异常,就执行这个位置的逻辑# try...else语句try:abc()
except Exception as e:print(e)
else:print('') #当try语句中的代码没有异常,就执行else中的代码# try...finally语句try:abc()
except Exception as e:print(e)
finally:print('') #不论try中有没有异常,finally都会执行#自主出发异常  关键字 raise
try:raise TypeError('类型错误')
except Exception as e:print(e)

断言处理
assert断言是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常。

语法:

assert expression[,reason]assert 表达式 [, 参数]

assert语句一般用于对程序某个时刻必须满足的条件进行验证,仅当”debug” 为True时有效。当PYthon脚本以_()选项编译为字节码文件是,assert语句将被移除以提高运行速度。

>>> assert len([1,2,3,4,5,6]) >=5  #列表元素个数小于5
>>> assert 2==1   #2不等于1Traceback (most recent call last):File "<stdin>", line 25, in <module>assert 2==1   #2不等于1
AssertionError# 格式:assert  条件  , 条件为false时的错误信息, 结果为raise一个AssertionError出来

用sys模块回溯最后的异常

当发生异常时Python会回溯异常,给出大量的提示,可能会给程序员的定位和纠错带来一定的困难,这是可以使用sys模块回溯最近一次异常。语法为:

import sys
try:block
except:t==sys.exc_info()print(t)"""
sys.exc_info()返回值是一个三元组(type,value/message,traceback)。其中,type表示异常的类型,value/message表示异常的信息或者参数,而traceback则包含调用栈信息的对象。sys.exc_info()可以直接定位最终引发异常的原因,结果比较简洁,但是缺点是难以直接确定引发异常的代码位置
"""

raise

语法结构:

raise [exceptionName [(reason)]]

其中,用 [] 括起来的为可选参数,其作用是指定抛出的异常名称,以及异常信息的相关描述。如果可选参数全部省略,则 raise 会把当前错误原样抛出;如果仅省略 (reason),则在抛出异常时,将不附带任何的异常描述信息。

每次执行 raise 语句,都只能引发一次执行的异常。

#举个简单例子
try:a = 2#判断是否为 1if a != 1:raise ValueError("a 不为 1")
except ValueError as e:print("引发异常:",repr(e))"""
运行结果为:
引发异常: ValueError('a 不为 1',)
"""

自定义异常

#定义一个异常类,继承Exception
class Networkerror(Exception):def __init__(self):passdef __str__(self):return "这是一个异常说明!"try:raise Networkerror()  # raise 出这个异常
except Networkerror as e:print(e)"""
输出: 这是一个异常说明!
"""

python 抛出异常记录相关推荐

  1. Python学习记录day3

    2019独角兽企业重金招聘Python工程师标准>>> Python学习记录 day3 今天是银角大王武sir讲课.先回顾了上节课所学,然后讲到了面向对象思想. set set是一个 ...

  2. python进阶记录之基础篇二十六_Python进阶记录之基础篇(十六)

    回顾 在Python进阶记录之基础篇(十五)中,我们介绍了面向对象的基本概念以及Python中类和对象的基础知识,需要重点掌握类的创建和对象的使用.今天我们继续讲一下Python中面向对象的相关知识点 ...

  3. python日志记录_Python日志记录

    python日志记录 To start, logging is a way of tracking events in a program when it runs and is in executi ...

  4. 【Python学习记录】Numpy广播机制(broadcast)

    ✨ 博客主页:小小马车夫的主页 ✨ 所属专栏:Python学习记录 文章目录 一.什么是Numpy广播机制 二.Numpy广播应用 三.Numpy广播规则 一.什么是Numpy广播机制 在Numpy. ...

  5. Python学习记录——英文名修改成标准格式

    Python学习记录--英文名修改成标准格式 功能需求 把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字.输入:['adam', 'LISA', 'barT'],输出:['Adam', ...

  6. python学习记录——容器篇

    容器 字符串 下标(索引) # 下表也称为是索引,是一个整型数字,可以是正数,也可以是负数 # 正数下标是从0开始的,表示第一个字符,-1表示最后一个字符 my_str = 'hello'h e l ...

  7. Python学习记录day6-反射、常用模块

    Python学习记录day6-反射.常用模块 @(学习)[python] Python学习记录day6-反射常用模块 反射 常用模块 1 sys System-specific parameters ...

  8. Opencv+Python学习记录9:掩膜(掩码)的使用(内附详细代码)

    一,基本概念 OpenCV中的很多函数都会指定一个掩模,也被称为掩码,例如: 计算结果=cv2.add(参数1,参数2,掩模) 当使用掩模参数时,操作只会在掩模值为非空的像素点上执行,并将其他像素点的 ...

  9. 蜗牛一步一步地往上爬的Python学习记录

    Python学习记录 前言 简介 基础知识 类型变量 高级特性 函数式编程 高阶函数 偏函数 装饰器decorator 匿名函数 前言 第一,绝对不断更: 第二,绝对认真写: 第三,绝对撰写的公正漂亮 ...

最新文章

  1. Linux下使用dmidecode查看服务器的详细的硬件配置
  2. 链表表示八进制加法c语言,用单链表实现八进制加法操作,恳请大家看看Add( )函数的问题...
  3. 年轻人,拼命奋斗还是保命要紧?
  4. Linux阻塞和同步机制
  5. sklearn学习总结
  6. 华为做raid5步骤_华为手机这个功能真棒!一键将录音转为文字!快快用起来吧...
  7. 无法绑定到新的显示成员,参数名:newDisplayMember
  8. 网页自动切换html css js,HTML页面自动清理js、css文件的缓存(自动添加版本号)_HTML/Xhtml_网页制作...
  9. 一起谈.NET技术,基于Visual Studio 2010 阐述C#4个特性
  10. AndroidManifest.xml详解(service)
  11. Photoshop小技巧集锦八十条
  12. 学习笔记-关于pf标志位
  13. IT计算机实习:JAVA实习报告范文(一)
  14. 测试5g网速的软件排行榜,2021网络测速app排行榜-手机网速测试软件推荐
  15. 计算机网络中的网卡作用
  16. 关于android6.0网络连接感叹号的问题
  17. 【小白必读】机器学习入门须知
  18. ISO七层模型和TCP/IP四层模型
  19. 号外号外:谷歌可能退出中国
  20. 整理一些链接(开源网站模板,免费素材,安卓苹果模拟机)

热门文章

  1. java编程实现求回文数_Java编程之回文数
  2. 组件容器服务器的关系,什么是docker 容器编排
  3. AAC Advanced Audio Coding(高级音频编码)资料整理
  4. 代谢组学资讯,全球爆火的ChatGPT,是如何看待三阴性乳腺癌的?
  5. p4 编程语言环境配置
  6. datax数据迁移之从oracle往Mysql迁移
  7. DNSPod十问梁定安: 工业互联网唤醒制造业的第二个春天
  8. funcode小游戏暑假大作业,开源,新颖,游戏名:凿空,免费。
  9. 【老保姆教程】:Tesseract-OCR图片文字识别
  10. Windows系统下结束卡死的应用程序