博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 异常处理
阅读量:7092 次
发布时间:2019-06-28

本文共 4092 字,大约阅读时间需要 13 分钟。

用到的

else  ---------------  else的子代码块会在被检测的代码没有异常情况下执行,else必须放在后面

finally  -------------  无论被检测的代码有没有异常都会执行

raise  --------------  主动触发异常

assert  ------------  断言

常用异常

Exception  --------  万能异常类型

AttributeError  -------------  试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x

IOError  ---------------------  输入/输出异常;基本上是无法打开文件
ImportError  ---------------  无法引入模块或包;基本上是路径问题或名称错误
IndentationError  ---------  语法错误(的子类) ;代码没有正确对齐
IndexError  ----------------  下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5]
KeyError  ------------------  试图访问字典里不存在的键
KeyboardInterrupt  ------  Ctrl+C被按下
NameError  ---------------  使用一个还未被赋予对象的变量
SyntaxError  --------------  Python代码非法,代码不能编译(个人认为这是语法错误,写错了)
TypeError  -----------------  传入对象类型与要求的不符合
UnboundLocalError  ----  试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它
ValueError  ----------------  传入一个调用者不期望的值,即使值的类型是正确的

ArithmeticErrorAssertionErrorAttributeErrorBaseExceptionBufferErrorBytesWarningDeprecationWarningEnvironmentErrorEOFErrorExceptionFloatingPointErrorFutureWarningGeneratorExitImportErrorImportWarningIndentationErrorIndexErrorIOErrorKeyboardInterruptKeyErrorLookupErrorMemoryErrorNameErrorNotImplementedErrorOSErrorOverflowErrorPendingDeprecationWarningReferenceErrorRuntimeErrorRuntimeWarningStandardErrorStopIterationSyntaxErrorSyntaxWarningSystemErrorSystemExitTabErrorTypeErrorUnboundLocalErrorUnicodeDecodeErrorUnicodeEncodeErrorUnicodeErrorUnicodeTranslateErrorUnicodeWarningUserWarningValueErrorWarningZeroDivisionError
更多异常

 

异常处理

异常是错误发生的信号, 一旦程序出错就会产生一个异常, 如果该异常没有被应用程序处理, 那么该异常就会抛出来, 程序的执行也随之终止

异常包含三个部分:

  1. traceback异常的追踪信息

  2. 异常的类型

  3. 异常的信息

错误分为两大类:

  1. 语法上的错误: 在程序运行前就应该立即修正

  2. 逻辑上的错误 

用异常处理是避免程序因为异常而奔溃, 所以在应用程序中应该对异常进行处理, 从而增强程序的健壮性

 

自定义处理异常结构:

1) try: except Exception as e:2) try: except Exception: else:3) try: except Exception: else: finally:4) try: except...5) try: finally:

例子:

1 try: 2     代码1 3     代码2 4     代码3 5     ........ 6 except NameError: 7     当抛出的异常是NameError时执行的子代码块 8 except ....: 9     pass10 except ....:11     pass12 else:    #else必须放到后面, else的子代码块会在被检测的代码没有异常的情况下执行        13     pass14 finally:    #无论被检测的代码有没有异常都会执行15 pass

 

异常处理的单分支

1 try: 2     print('=====1') 3     print('=====2') 4     print('=====3') 5     d = {
'x': 1, 'y': 2} 6 d['z'] # KeyError 7 print('=====4') 8 l = [1, 2, 3] 9 l[1000] # IndexError10 print('=====5')11 except IndexError:12 print('IndexError')13 14 print('other code')

 

异常处理的多分支

1 try: 2     print('=====1') 3     print('=====2') 4     print('=====3') 5     d = {
'x': 1, 'y': 2} 6 d['z'] # KeyError 7 print('=====4') 8 l = [1, 2, 3] 9 l[1000] # IndexError10 print('=====5')11 except IndexError:12 print('IndexError')13 14 print('other code')

 

万能异常类型Exception: 可以匹配任意类型的异常

1 try: 2     print('=====1') 3     print('=====2') 4     print('=====3') 5     d = {
'x': 1, 'y': 2} 6 # d['z'] # KeyError 7 # xxx 8 print('=====4') 9 l = [1, 2, 3]10 l[1000] # IndexError11 print('=====5')12 except IndexError as e:13 print('IndexError:', e)14 except KeyError as e:15 print('KeyError:', e)16 except Exception as e:17 print('Exception:', e)18 19 print('other code')

 

主动触发异常

1 class People: 2     def __init__(self, name, age): 3         self.__name = name 4         self.__age = age 5  6     def tell_info(self): 7         print(self.__name, self.__age) 8  9     def set_info(self, name, age):10         if not isinstance(name, str):11             raise TypeError('名字必须是str类型')12         if not isinstance(age, int):13             raise TypeError('年龄必须是int类型')14         self.__name = name15         self.__age = age16 17 18 obj = People('egon', 18)19 obj.set_info('egon', 123)20 obj.tell_info()

 

自定义异常类型(了解):

继承BaseException即可自定义异常类型

1 class MyException(BaseException): 2     def __init__(self, msg): 3         super().__init__() 4         self.msg = msg 5  6     def __str__(self): 7         return '<%s>' % self.msg 8  9 10 raise MyException('我自定义的异常')

 

断言(了解)

1 print('上半部分,生产数据')2 l=[1,2,3,4,]3 4 if len(l) != 5:5     raise TypeError('列表的长度必须为5')6 assert len(l) == 57 8 print('下半部分,处理数据')

 

转载于:https://www.cnblogs.com/earon/p/9544446.html

你可能感兴趣的文章
TabBarController和其他view无法建立Relationship segue的原因
查看>>
C语言中结构体变量之间赋值
查看>>
javascript精度问题与调整
查看>>
《从零開始学Swift》学习笔记(Day 63)——Cocoa Touch设计模式及应用之单例模式...
查看>>
hdu 3342 Legal or Not (拓扑排序)
查看>>
Dubbo限制大数据传输的解决方案
查看>>
ML学习分享系列(2)_计算广告小窥[中]
查看>>
form怎样正确post文件
查看>>
JVM概述
查看>>
artTemplate子模板include
查看>>
C#模拟POST提交表单(一)--WebClient
查看>>
[Spark][python]从 web log 中提取出 UserID 作为key 值,形成新的 RDD
查看>>
数据结构与算法(周鹏-未出版)-第六章 树-6.5 Huffman 树
查看>>
Zephyr的Shell
查看>>
fpga技能树
查看>>
国内的Android SDK镜像
查看>>
Bootstrap系列 -- 36. 向上弹起的下拉菜单
查看>>
TMS320C6455 SRIO 实现方案
查看>>
Hough transform(霍夫变换)
查看>>
background-color
查看>>