我们在开发当中经常会遇到一些未知或已知的错误,比如用requests发送请求时可能会出现异常,或者某个程序计算时出现分母为0的情况。面对各种奇形怪状的错误,高级语言都会有一个抛出错误的机制。在Python中,他就是raise了。

raise()

raise是什么意思呢?raise是用raise语句来引发一个异常。异常/错误对象必须有一个名字,且它们应是Error或Exception类的子类。

抛出异常和自定义异常

Python用异常对象(exception object)表示异常情况,遇到错误后,会引发异常。如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行。

raise 语句

Python中的raise 关键字用于引发一个异常,基本上和C#和Java中的throw关键字相同,如下所示:

def ThorwErr():

raise Exception("抛出一个异常")

# Exception: 抛出一个异常

ThorwErr()

raise关键字后面是抛出是一个通用的异常类型(Exception),一般来说抛出的异常越详细越好,Python在exceptions模块内建了很多的异常类型,通过使用dir函数来查看exceptions中的异常类型,如下:

import exceptions

# ['ArithmeticError', 'AssertionError'.....]

print dir(exceptions)

传递异常

捕捉到了异常,但是又想重新引发它(传递异常),可以使用不带参数的raise语句即可:

class MuffledCalculator:

muffled = False

def calc(self,expr):

try:

return eval(expr)

except ZeroDivisionError:

if self.muffled:

print 'Division by zero is illegal'

else:

raise

自定义异常类型

Python中也可以自定义自己的特殊类型的异常,只需要要从Exception类继承(直接或间接)即可:

class SomeCustomException(Exception):

pass

捕捉异常

捕捉一个异常

和C#中的try/catch类似,Python中使用try/except关键字来捕捉异常,如下:

try:

print 2/0

except ZeroDivisionError:

print '除数不能为0'

捕捉多个异常

在一个except语句只捕捉其后声明的异常类型,如果可能会抛出的是其他类型的异常就需要再增加一个except语句了,或者也可以指定一个更通用的异常类型比如:Exception,如下:

try:

print 2/'0'

except ZeroDivisionError:

print '除数不能为0'

except Exception:

print '其他类型异常'

为了捕获多个异常,除了声明多个except语句之外,还可以在一个except语句之后将多个异常作为元组列出来即可:

try:

print 2/'0'

except (ZeroDivisionError,Exception):

print '发生了一个异常'

获取异常信息

每个异常都会有一些异常信息,一般情况下我们应该把这些异常信息记录下来:

try:

print 2/'0'

except (ZeroDivisionError,Exception) as e:

# unsupported operand type(s) for /: 'int' and 'str'

print e

finally子句

finally子句和try子句联合使用但是和except语句不同,finally不管try子句内部是否有异常发生,都会执行finally子句内的代码。所有一般情况下,finally自己常常用于关闭文件或者在Socket中。

try:

print 2/'0'

except (ZeroDivisionError,Exception):

print '发生了一个异常'

finally:

print '不管是否发生异常都执行'

zerodivisionerror什么意思python-python里的raise是什么意思相关推荐

  1. Python函数里的爱情故事

    Python语言的学习中,有很多有意思的事件,本文就像大家展示了Python函数里的爱情故事,告诉大家其实编程还能这么去用,希望对大家的学习Python语言有所帮助 一直被拒型 def my_love ...

  2. python 数据分析里axis=0/1 行列定义为什么每次都不同?(比如pandas, numpy, DataFrame)

    在numpy中, axis=0表示按列操作, axis=1表示按行操作 [20190819 作者注] 作者看了之后, 表示对以上结论表示怀疑 参考文章1: python数据分析里axis=0/1 行列 ...

  3. python语言里数字包括_4.1Python语言中的数字、字符串数据类型讲解

    标准数据类型 Python3 中有六个标准的数据类型: int bool float complex(复数) Number(数字) String(字符串) List(列表) Tuple(元组) Set ...

  4. python中类里self_Python类中的self到底是干啥的

    Python类中的self到底是干啥的 Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上.后来对Python渐渐熟悉了一点,再回头看self的 ...

  5. [转载] 当心掉进Python多重继承里的坑

    参考链接: Python多重继承 关于类的知识点里面,有一块是关于多重继承,跟其他主流语言一样,Python也支持多重继承,多重继承虽然有一些好处,但是坑很多,我们今天就来聊一聊Python多重继承里 ...

  6. python: python语法

    python入门 文章目录 python入门 3.1学习新语言的步骤 3.1.1为什么要设计python? 3.1.2 python的应用领域 3.2搭建python开发环境 3.2.1安装的说明 3 ...

  7. “人生苦短,我用Python“——python基础<3>

    python变成入门总结3 字符串 什么是字符串的驻留机制? 字符串的查询操作 字符串的大小写转换操作 字符串内容对齐操作 字符串分隔操作方法 判断字符串的方法 字符串操作的其他方法 字符串的比较操作 ...

  8. [PYTHON]python 基础笔记(1)

    最近一直在研究python... 自学了一段时间,感觉对我这种本身脑子转不过弯的人来是真心是个不错的选择.. 以下是自己学习总结的笔记,有需要的朋友可以用来参考. 系统版本: Centos6.3 x6 ...

  9. 从scratch到python轻松学下载_STEAM教育-[少儿创客] 从Scratch到Python——python turtle-电路城论坛 - 电子工程师学习交流园地...

    从Scratch到Python--python turtle 一种比pygame更加简洁的实现 现在很多学校都开设了Scratch课程,学生可以利用Scratch创作丰富的作品,然而Scratch之后 ...

  10. 初识python——python的发展历程及python各个版本之间的区别,python的安装

    初识python--python的发展历程及python各个版本之间的区别,python的安装 什么是python python的起源 python主要发展历程 python各个版本之间的区别 如何选 ...

最新文章

  1. 一道神坑题 POJ3026 Borg Maze BFS+prim算法
  2. 内部人看FaceBook
  3. python面试题及答案-5个很好的Python面试题问题答案及分析
  4. hibernate一级缓存和二级缓存的区别[转]
  5. php读取js验证码,js实现获取短信验证码实例
  6. php操作mysql的封装类_PHP封装的mysqli数据库操作类示例
  7. SAP CRM Fiori应用里取top20的service url的determine逻辑
  8. android 调出键盘表情_Android 软键盘和emoji表情切换方案,和微信几乎一样的体验...
  9. 字符动图_手把手教你做一个python+matplotlib的炫酷的数据可视化动图
  10. sharepoint timer job 读取config文件内容
  11. Java与Http协议
  12. python 深度 视差 计算_python-窗口代价计算视差
  13. python输出运行时间_分析python程序运行时间的几种方法
  14. Python: TensorFlow2.4与CUDA11.1缺失 ‘cusolver64_10.dll‘动态库
  15. 北京户口 - 百度百科
  16. python发明小故事简写_科学发明小故事10字以上
  17. GET data:image/jpg;base64,35,37,....... net::ERR_INVALID_URL
  18. 关于qt使用sqlist数据库的注意事项
  19. 关于office/word/excel/powerpoint/ppt弹出“配置进度”的解决办法
  20. jsonp跨域原理解析

热门文章

  1. 机试指南第二章-经典入门-排版例题自解
  2. php单元测试断言方法
  3. Apache Thrift使用简介
  4. Linux 下zip包的压缩与解压
  5. 世界上第一位程序员是位美女——AdaLovelace【有图为证】
  6. 一款图像相关软件PhoXo
  7. 没有任何基础的可以学python吗-对没有编程基础的人来说,直接学Python入门IT合适吗?...
  8. python3.6安装-python3.6的安装及注意事项
  9. python怎么导入包-python模块之导入包及模块发布
  10. 不懂编程可以自学python吗-python教程看完了,还是不会编程?