当前位置: 首页 > news >正文

【】Python】异常处理try...except、raise

一、try...except

有时候我们写程序的时候,会出现一些错误或异常,导致程序终止。例如,做除法时,除数为0,会引起一个ZeroDivisionError

例子:

1
2
3
4
a = 10
b = 0
c = a / b
print  "done"

运行结果:

Traceback (most recent call last):
File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 3, in <module>
c=a/b
ZeroDivisionError: integer division or modulo by zero

我们发现程序因为ZeroDivisionError而中断了,语句print "done" 没有运行。为了处理异常,我们使用try...except,更改代码:

1
2
3
4
5
6
7
8
a = 10
b = 0
try :
     c = a / b
     print  c
except  ZeroDivisionError,e:
     print  e.message
print  "done"

  

运行结果:

integer division or modulo by zero
done

这样程序就不会因为异常而中断,从而print "done"语句正常执行。

我们把可能发生错误的语句放在try模块里,用except来处理异常。except可以处理一个专门的异常,也可以处理一组圆括号中的异常,如果except后没有指定异常,则默认处理所有的异常。每一个try,都必须至少有一个except

处理一组异常可以这样写(其中e代表异常的实例):

1
2
3
4
try
     pass
except  (IOError ,ZeroDivisionError),e:
     print  e

try ....except...else 语句,当没有异常发生时,else中的语句将会被执行。

例子:

1
2
3
4
5
6
7
8
9
10
a = 10
b = 0
try :
     =  b /  a
     print  c
except  (IOError ,ZeroDivisionError),x:
     print  x
else :
     print  "no error"
print  "done"

运行结果:

0
no error
done

二、raise 引发一个异常

例子:如果输入的数据不是整数,则引发一个ValueError

1
2
3
4
5
inputValue = input ( "please input a int data :" )
if  type (inputValue)! = type ( 1 ):
     raise  ValueError
else :
     print  inputValue

假设输入1.2,运行结果为:

please input a int data :1.2
Traceback (most recent call last):
File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 3, in <module>
raise ValueError
ValueError

如果输入1,运行结果为:

please input a int data :1
1

三、try ...finally 

无论异常是否发生,在程序结束前,finally中的语句都会被执行。

1
2
3
4
5
6
a = 10
b = 0
try :
     print  a / b
finally :
     print  "always excute"

运行结果:

Traceback (most recent call last):
always excute
File "C:/Users/lirong/PycharmProjects/untitled/openfile.py", line 4, in <module>
print a/b
ZeroDivisionError: integer division or modulo by zero

虽然有异常发生,但在程序终止前,finally中的语句也能正常执行。。

finally语句也可以和except语句一起使用。

1
2
3
4
5
6
7
8
a = 10
b = 0
try :
     print  a / b
except :
     print  "error"
finally :
     print  "always excute"

运行结果:

error

always excute

四、自定义一个异常类

自定义一个MyException类,继承Exception。

1
2
3
4
class  MyException(Exception):
     def  __init__( self ,message):
         Exception.__init__( self )
         self .message = message   

如果输入的数字小于10,就引发一个MyException异常:

1
2
3
4
5
6
a = input ( "please input a num:" )
if  a< 10 :
     try :
         raise  MyException( "my excepition is raised " )
     except  MyException,e:
         print  e.message

  

运行结果:

please input a num:1
my excepition is raised

五、python所有的标准异常类:

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

  

相关文章:

  • autofac文档:Component创建
  • 详解阿里云企业办公解决方案,开启办公“轻”时代
  • 分享45个android实例源码,很好很强大.收藏吧!!!
  • 小试R空间处理新库sf
  • Gnuplot 使用技巧
  • js去除空格12种方法
  • 与、或、异或、取反、左移和右移
  • oracle数据库设置了默认字段,但默认值无效
  • MFC应用程序向导生成的最简单程序HelloMFC详解
  • miniconda管理python[windows10]
  • eclipse中字体太小
  • C# Math函数 字符串、整数装换
  • 存储与虚拟机主机管理(五)
  • 短文本合并重复(去重)的简单有效做法
  • css布局,左右固定中间自适应实现
  • 收藏网友的 源程序下载网
  • [LeetCode] Wiggle Sort
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • CSS居中完全指南——构建CSS居中决策树
  • ES6 学习笔记(一)let,const和解构赋值
  • EventListener原理
  • hadoop集群管理系统搭建规划说明
  • HTML-表单
  • JavaScript-Array类型
  • Java面向对象及其三大特征
  • MaxCompute访问TableStore(OTS) 数据
  • Node 版本管理
  • Python中eval与exec的使用及区别
  • Shell编程
  • text-decoration与color属性
  • Vue2.x学习三:事件处理生命周期钩子
  • 从伪并行的 Python 多线程说起
  • 读懂package.json -- 依赖管理
  • 关于使用markdown的方法(引自CSDN教程)
  • 我的面试准备过程--容器(更新中)
  • 以太坊客户端Geth命令参数详解
  • 优秀架构师必须掌握的架构思维
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • !!java web学习笔记(一到五)
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .NET HttpWebRequest、WebClient、HttpClient
  • .net 调用php,php 调用.net com组件 --
  • .net 设置默认首页
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET简谈设计模式之(单件模式)
  • .NET框架设计—常被忽视的C#设计技巧
  • .Net中的设计模式——Factory Method模式