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

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

--引入

  程序运行时,难免出现bug,当出现bug时,用户可能很难明白那一堆报错代码到底是个什么东西,为了让用户能更清楚知道错误原因或者直接对用户将此错误屏蔽,异常处理就应运而生。

--格式

try:              #输入要运行的代码    pass            except NameError as err:   #将该类型的错误捕获    passexcept Exception as err:    #将所有类型的错误捕获    passelse:              #如果没有错误,则运行该段代码    passfinally:            #不管是否存在错误,都运行该段代码    pass

----错误种类

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

异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。当然指定异常类也可以捕获自己的子类

  实例:

try:    print(res)          #变量res未定义except NameError as err:    print(' Error: %s'%err)except IndexError as err:    print('index err')finally:    print('end')#结果 Error: name 'res' is not definedend

在python的异常中,有一个万能异常:Exception,他可以捕获任意异常,即:

try:    print(res)except Exception as err:    print('有错误!!%s'%err)finally:    print('end')#结果有错误!!name 'res' is not definedenda=[1,2,3]try:    print(a[3])except Exception as err:    print('有错误!!%s'%err)finally:    print('end')#结果有错误!!list index out of rangeend
code

这样,对于需要特殊处理或提醒的异常需要先定义,最后定义Exception来确保程序正常运行

----优点

使用try……except捕获错误不仅简单方便,而且还有一个巨大的好处,就是可以跨越多层调用。

def real(num):    return num/2def operate01(num):    num=num+2    return real(num)def operate02(num):    try:        return operate01(num)    except Exception as err:        print('出错了!!')print(operate02('2'))#结果出错了!!None

本例中实际是在operate01中出错了,而我们可以直接在operate02中进行捕获。

----主动触发异常

try:    raise Exception('出错了!!')except Exception as e:    print(e)#结果出错了!!

 你可以用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类。

class InvalidPage(Exception):    def __init__(self,data):        self.data = datatry:    raise InvalidPage('HAHA')except InvalidPage as a:    print('%s is a Invalid page'%a.data)

 

转载于:https://www.cnblogs.com/MnCu8261/p/5543063.html

你可能感兴趣的文章
C#后台程序与HTML页面中JS方法互调
查看>>
mysql 同一个表中 字段a 的值赋值到字段b
查看>>
linux系统可执行文件添加环境变量使其跨终端和目录执行
查看>>
Window7通过Anaconda安装Tensorflow
查看>>
antiSMASH数据库:微生物次生代谢物合成基因组簇查询和预测
查看>>
UNICODE与ANSI的区别
查看>>
nginx 配置实例
查看>>
Flutter - 创建底部导航栏
查看>>
ASP.NET MVC 教程-MVC简介
查看>>
SQL Server索引 - 聚集索引、非聚集索引、非聚集唯一索引 <第八篇>
查看>>
转载:详解SAP TPM解决方案在快速消费品行业中的应用
查看>>
Android OpenGL ES 开发(N): OpenGL ES 2.0 机型兼容问题整理
查看>>
项目中用到的技术及工具汇总(持续更新)
查看>>
【算法】各种排序算法测试代码
查看>>
HDU 5776 Sum
查看>>
201521123044 《Java程序设计》第9周学习总结
查看>>
winfrom 图片等比例压缩
查看>>
人工智能实验报告一
查看>>
用LR12录制app,用LR11跑场景,无并发数限制,已试验过,可行!
查看>>
python 多线程就这么简单(转)
查看>>