我是靠谱客的博主 清爽高跟鞋,最近开发中收集的这篇文章主要介绍【python】异常的处理以及traceback的异常处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

异常机制的本质

try多个except结构

try...except..else结构

try...except..finally结构

traceback模块的使用以及异常写入日志文件

自定义异常类


异常机制的本质

       异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等等。

       所谓异常处理,就是指程序在出现问题时依然可以正确的执行剩余的程序,而不会因为异常而终止程序执行。

       python中,引进了很多用来描述和处理异常的类,称为异常类,异常类定义中包含类该类异常的信息和对异常进行处理的方法,下面叫为完整的展示了python中内建异常类的继承层次:

BaseException(所有异常的父类)KeyboardInterrupt 
ExceptionNameError、ValueError、AttributeError等等
SystemExit 
GeneratorExit 

python中一切都是对象,异常也采用对象的方式来处理,处理过程:

  1. 抛出异常:在执行一个方法时,如果发送异常,则这个方法生成来代表该异常的一个对象,停止当前执行路径,并把异常对象提交给解释器
  2. 捕获异常:解释器得到该异常后,寻找相应的代码来处理该异常

try多个except结构

出现多个异常时,按照先子类后父类的顺序,并且针对性的写出异常处理代码,为了避免遗漏可能出现的异常,可以在最后增加BaseException,结构如下:

try:

     pass

excep Exception1:

     pass

excep Exception2:

     pass

......

try...except..else结构

try...except..else结构增加来“else块“,如果try块中没有抛出异常,则执行else块,如果try抛出异常,则执行except块,不执行else块。

try:
a=input("请输入被除数:")
b=input("请输入除数:")
c=float(a)/float(b)
except BaseException as f:
#有异常执行这里,不执行else
print(f)
else:
#没有异常执行这里,
print(c)

try...except..finally结构

try...except..finally结构中,finally块无论是否发生异常都会被执行,通常用来释放try块中申请的资源(比如在try打开文件,需要关闭,就可以在finally中执行)

try:
a=input("请输入被除数:")
b=input("请输入除数:")
c=float(a)/float(b)
except BaseException as f:
#有异常执行这里,不执行else
print(f)
else:
#没有异常执行这里,
print(c)
finally:
print("我这么都会执行")

常见的异常词汇

  1. SyntaxError:语法错误
  2. NameError:尝试访问一个没有声明的变量
  3. ZeroDivisionError:除数为0的错误
  4. ValueError:数值错误
  5. TypeError:类型错误
  6. AttributeError:访问对象不存在的属性
  7. IndexError:索引越界异常
  8. KeyError:字典的关键字不存在

其他异常名称:

异常名称说明
ArithmeticError所有数值计算错误的基类
AssertionError断言语句失败
BaseException所有异常的基类
DeprecationWarning关于被弃用的特征警告
EnvironmentError操作系统错误的基类
EOFError没有内建输入,到达EOF标记
Exception常规错误的基类
FloatingPointError浮点计算错误
FutureWarning关于构造将来语义会有改变的警告
GeneratorExit生成器发生异常来通知退出
ImportError导入模块/对象失败
IndentationError缩进错误
IndexError

序列中没有次索引(index)

IOError输入输出操作失败
KeyboardInterrupt用户中断执行(通常是输入crtl+c)
KeyError映射中没有这个键
LookupError无效数据查询的基类
MemoryError内存溢出错误(对于python解释器不是致命的)
NameError未声明/初始化对象(没有属性)
NotImplementedError尚未实现的方法
OSError操作系统错误
OverflowError数值运算超出最大限制
overflowWarning旧的关于自动提升为长整型(long)的警告
PendingDeprecationWarning关于特性将会被废弃的警告
ReferenceError弱引用(Weak reference)试图访问已经垃圾回收类的对象
RuntimeError一般运行时的错误
RuntimeWarning可疑的运行时行为(runtime behavior)的警告
StandardError所有的内建标准异常的基类
StopIteration迭代器没有更多的值
SyntaxError语法错误
SystaxWarning可疑语法的警告
SystemExit解释器退出
SystemError一般的解释器系统错误
TabErrorTab和空格混用
TypeError对类型无效的操作
UnboundLocalError访问未初始化的本地变量
UnicodeDecodeErrorUnicode解码是的错误
UnicodeEncodeErrorUnicode编码错误
UnicodeErrorUnicode相关的错误
UnicodeTranslateErrorUnicode转换时错误
UserWarning用户代码生成的错误
ValueError传入无效的参数
Warning警告的基类
WindowsError系统调用失败
ZeroDivisionError除(或取模)零(所有数据类型)

traceback模块的使用以及异常写入日志文件

【示例】

#测试traceback模块的使用
import traceback
try:
k=open('dsd')
except:
traceback.print_exc()
######将异常信息输出到指定的文件中########
try:
k=open('dsd')
except:
with open("a.txt","a") as f:
traceback.print_exc(file=f)

自定义异常类

        程序开发中,有时需要我们自己定义异常类,自定义异常类一般都是运行时异常,通常继承Exception或其子类即可,命名一般以Error、Exception为后缀。

       自定义异常由raise语句主动抛出

【示例】

class AgeError(Exception):
#继承Exception
def __init__(self,errorInfo):
Exception.__init__(self)
self.errorInfo=errorInfo
def __str__(self):
return str(self.errorInfo)+",年龄错误!年龄应该在1-150之间"
######测试代码#######
if __name__=="__main__":
age=int(input("输入一个年龄:"))
if age<1 or age>150:
raise AgeError(age)
else:
print(f"正常年龄:{age}")

 

最后

以上就是清爽高跟鞋为你收集整理的【python】异常的处理以及traceback的异常处理的全部内容,希望文章能够帮你解决【python】异常的处理以及traceback的异常处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部