Python笔记 之 异常处理

定义

一般情况下,在程序执行过程中可能会发生一些影响程序正常执行的事件,在Python无法正常处理该事件时就会发生一个异常。

  • 异常是Python对象,代表一个执行错误。
  • 程序发生异常时需要捕获处理,否则终止执行。
异常类型

以下异常类型引自本文为CSDN博主「Joshua-」原文链接.

  • BaseException:所有异常的 基类
  • Exception:常规异常的 基类
  • StandardError:所有的内建标准异常的基类
  • ArithmeticError:所有数值计算异常的基类
  • FloatingPointError:浮点计算异常
  • OverflowError:数值运算超出最大限制
  • ZeroDivisionError:除数为零
  • AssertionError:断言语句(assert)失败
  • AttributeError:尝试访问未知的对象属性
  • EOFError:没有内建输入,到达EOF标记
  • EnvironmentError:操作系统异常的基类
  • IOError:输入/输出操作失败
  • OSError:操作系统产生的异常(例如打开一个不存在的文件)
  • WindowsError:系统调用失败
  • ImportError:导入模块失败的时候
  • KeyboardInterrupt:用户中断执行
  • LookupError:无效数据查询的基类
  • IndexError:索引超出序列的范围
  • KeyError:字典中查找一个不存在的关键字
  • MemoryError:内存溢出(可通过删除对象释放内存)
  • NameError:尝试访问一个不存在的变量
  • UnboundLocalError:访问未初始化的本地变量
  • ReferenceError:弱引用试图访问已经垃圾回收了的对象
  • RuntimeError:一般的运行时异常
  • NotImplementedError:尚未实现的方法
  • SyntaxError:语法错误导致的异常
  • IndentationError:缩进错误导致的异常
  • TabError:Tab和空格混用
  • SystemError:一般的解释器系统异常
  • TypeError:不同类型间的无效操作
  • ValueError:传入无效的参数
  • UnicodeError:Unicode相关的异常
  • UnicodeDecodeError:Unicode解码时的异常
  • UnicodeEncodeError:Unicode编码错误导致的异常
  • UnicodeTranslateError:Unicode转换错误导致的异常
异常处理

可以使用try/except语句进行python语言里的异常处理。

  • try/except语句可以检测try语句中异常,而让except语句捕获并处理。
    • 异常想要被捕获,需要指定捕获的异常类型和发生的异常类型一致。
    • 可以为单条异常捕获代码指定多个捕获类型,用‘()’包裹
    • 可以增加多条异常捕获代码
    • 可以使用Exception承接所有异常
    • 可以不指定异常类型(效果同Exception)
    • 异常处理支持嵌套
  • try/except语法
    • try … except
      例如:
    try:  
    	f = open('123.txt','r') 
    	print(f.read())
    except IOError as err:  
    	print(err)
    
    try语句块试图读取当前目录下的’123.txt’文件,如果读取成功打印文件内容,如果当前目录下没有’123.txt’文件引发‘IOError’异常输出异常原因。
    • try … except … else
      例如:
    try:  
     	f = open('HelloWorld.txt','r')  
    except IOError as err:  
     	print(err)  
    else:  
     	print(f.read())
    
    效果同上,try语句块试图读取当前目录下的’HelloWorld.txt’文件,如果当前目录下没有’123.txt’文件引发‘IOError’异常输出异常原因,如果没有引发‘IOError’异常则打印文件内容。
    • try … except … else … finally
      例如:
    try:  
     	f = open('HelloWorld.txt','r')  
    except Exception as err:  
     	print(err)  
    else:  
     	print(f.read())
    finally:
    	print('Over')
    
    try语句块试图读取当前目录下的'HelloWorld.txt'文件,如果当前目录下没有'123.txt'文件引发‘IOError’异常输出异常原因,如果没有引发‘IOError’异常则打印文件内容,最后无论是否引发异常都要执行finally语句。
    **注意:try子块和else子块有承接关系,所以else子块可以使用try子块的局部变量,但except子块和finally子块不能使用try子块的局部变量,如果需要请使用全局变量或申明为全局变量。**
    
断言异常

Python笔记 之 assert

触发异常

可以使用raise语句自定义触发异常。
Python笔记 之 raise

自定义异常

用户可以通过直接或间接继承标准异常类的方式创建新的异常类。
例如:

class NetworkError(RuntimeError):  
 def __init__(self,args):  
 self.args = args  
        
try:  
 raise NetworkError(('message','网关错误'))  
except NetworkError as e:  
 print(e.args)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值