博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python常见异常处理方法
阅读量:4155 次
发布时间:2019-05-25

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

目录

1、异常处理意义

程序异常的意义在于当某个异常被触发后,因为存在异常处理机制,使得程序不会崩溃,而是进入定制的逻辑,使得服务能维持运行,提高了程序的健壮性与容错性。

常见的异常分类包括:

  • 程序遇到逻辑或语法错误
  • 运行过程中计算机错误:内存不够或者io错误

2、python常见异常

python常见异常如下:

BaseException    所有异常的基类SystemExit    解释器请求退出KeyboardInterrupt    用户中断执行(通常是输入^C)Exception    常规错误的基类StopIteration    迭代器没有更多的值GeneratorExit    生成器(generator)发生异常来通知退出StandardError    所有的内建标准异常的基类ArithmeticError    所有数值计算错误的基类FloatingPointError    浮点计算错误OverflowError    数值运算超出最大限制ZeroDivisionError    除(或取模)零 (所有数据类型)AssertionError    断言语句失败AttributeError    对象没有这个属性EOFError    没有内建输入,到达EOF 标记EnvironmentError    操作系统错误的基类IOError    输入/输出操作失败OSError    操作系统错误WindowsError    系统调用失败ImportError    导入模块/对象失败LookupError    无效数据查询的基类IndexError    序列中没有此索引(index)KeyError    映射中没有这个键MemoryError    内存溢出错误(对于Python 解释器不是致命的)NameError    未声明/初始化对象 (没有属性)UnboundLocalError    访问未初始化的本地变量ReferenceError    弱引用(Weak reference)试图访问已经垃圾回收了的对象RuntimeError    一般的运行时错误NotImplementedError    尚未实现的方法SyntaxError    Python 语法错误IndentationError    缩进错误TabError    Tab 和空格混用SystemError    一般的解释器系统错误TypeError    对类型无效的操作ValueError    传入无效的参数UnicodeError    Unicode 相关的错误UnicodeDecodeError    Unicode 解码时的错误UnicodeEncodeError    Unicode 编码时错误UnicodeTranslateError    Unicode 转换时错误Warning    警告的基类DeprecationWarning    关于被弃用的特征的警告FutureWarning    关于构造将来语义会有改变的警告OverflowWarning    旧的关于自动提升为长整型(long)的警告PendingDeprecationWarning    关于特性将会被废弃的警告RuntimeWarning    可疑的运行时行为(runtime behavior)的警告SyntaxWarning    可疑的语法的警告UserWarning    用户代码生成的警告

3、python常见异常处理方法

3.1 使用if判断式

num1=input('>>: ') #输入一个字符串试试if num1.isdigit():    int(num1) #我们的正统程序放到了这里,其余的都属于异常处理范畴elif num1.isspace():    print('输入的是空格,就执行我这里的逻辑')elif len(num1) == 0:    print('输入的是空,就执行我这里的逻辑')else:    print('其他情情况,执行我这里的逻辑')

使用if判别式存在的问题:

  • 问题一:

使用if的方式我们只为第一段代码加上了异常处理,针对第二段代码,你得重新写一堆if,elif等

而这些if,跟你的代码逻辑并无关系,可读性差

  • 问题二:

第一段代码和第二段代码实际上是同一种异常,都是ValueError,相同的错误按理说只处理一次就可以了,而用if,由于这二者if的条件不同,这只能逼着你重新写一个新的if来处理第二段代码的异常

第三段也一样

3.2 try…except

try…except语法如下:

try:    print (1/0)except ZeroDivisionError as err:        # as 加原因参数名称    print ('Exception: ', err)

可以有多条except分支:

try:    msg=input('>>:')    int(msg) #ValueErrorexcept ValueError as e:    print(e)except NameError:    print('NameError')except KeyError as e:    print(e)

如果不知道自己程序可能发生的错误类型,可用下面方法:

s1 = 'hello'try:    int(s1)except Exception as e:    print(e)

3.3 try-finally 语句

try-finally 语句***无论是否发生异常都将执行最后的代码***。

s1 = 'hello'try:    int(s1)except IndexError as e:    print(e)except KeyError as e:    print(e)except ValueError as e:    print(e)#except Exception as e: #如果不知道错误类型,那就用Exception#    print(e)else:    print('try内代码块没有异常则执行我')finally:    print('无论异常与否,都会执行该模块,通常是进行清理工作')

3.4 主动触发异常

使用raise语句来主动触发异常。

raise语法格式如下:
raise [Exception [, args [, traceback]]]
语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是"None"。最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。

try:    raise TypeError('类型错误')except Exception as e:    print(e)

输出:

类型错误

转载地址:http://kvrti.baihongyu.com/

你可能感兴趣的文章
人在江湖:如何用代码保护自己
查看>>
给Iteye的安全建议(关于用户登陆风险)
查看>>
Redmine2.2.0启动报mysql连接错误
查看>>
BackTrack5 - error:unknown filesystem
查看>>
Ubuntu 软件的安装与卸载
查看>>
第一章数据结构(思维导图)
查看>>
VC环境下的灵活运用
查看>>
数据结构第1,2章总结
查看>>
数据结构 成绩表的ADT
查看>>
第二章 线性表(思维导图)
查看>>
第三章 栈和队列 思维导图
查看>>
栈和队列实验
查看>>
数据结构课程设计(题目4)
查看>>
vim一键执行Python代码
查看>>
编程初学者的4大网站(免费)
查看>>
CSU1507 超大型LED显示屏_模拟题
查看>>
Eratosthenes筛法
查看>>
时间复杂度和空间复杂度_简单易上手
查看>>
时间复杂度和空间复杂度_增强版
查看>>
递归算法时间复杂度_递归树
查看>>