浅谈python抛出异常、自定义异常, 传递异常


Posted in Python onJune 20, 2016

一. 抛出异常

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

raise 语句

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

import traceback

def throw_error():
  raise Exception("抛出一个异常")#异常被抛出,print函数无法执行
  print("飞天猪")
  
throw_error()

#运行结果:

'''Traceback (most recent call last):
 File "C:\Users\Administrator\Desktop\systray.py", line 7, in <module>
  throw_error()
 File "C:\Users\Administrator\Desktop\systray.py", line 4, in throw_error
  raise Exception("抛出一个异常")#异常被抛出,print函数无法执行
Exception: 抛出一个异常'''

raise关键字后面是抛出是一个通用的异常类型(Exception),一般来说抛出的异常越详细越好

二.传递异常:

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

class MufCalc(object):
  m = False
  def calc(self,exp):
    try:
      return eval(exp)
    except ZeroDivisionError:
      if self.m:
        print("cool")
      else:
        raise

app = MufCalc()
app.calc(2/0)

三.自定义异常类型

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

class MyError(Exception):
  pass
Python 相关文章推荐
Python实现TCP协议下的端口映射功能的脚本程序示例
Jun 14 Python
Python输出各行命令详解
Feb 01 Python
python 接口测试response返回数据对比的方法
Feb 11 Python
通过pycharm使用git的步骤(图文详解)
Jun 13 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
Jun 19 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
Aug 07 Python
Python3实现英文字母转换哥特式字体实例代码
Sep 01 Python
通过实例了解python__slots__使用方法
Sep 14 Python
编写python代码实现简单抽奖器
Oct 20 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
python爬虫多次请求超时的几种重试方法(6种)
Dec 01 Python
代码复现python目标检测yolo3详解预测
May 06 Python
python3 与python2 异常处理的区别与联系
Jun 19 #Python
浅谈Python的异常处理
Jun 19 #Python
qpython3 读取安卓lastpass Cookies
Jun 19 #Python
python3实现读取chrome浏览器cookie
Jun 19 #Python
python3 实现的人人影视网站自动签到
Jun 19 #Python
python3实现暴力穷举博客园密码
Jun 19 #Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
Jun 18 #Python
You might like
php实现window平台的checkdnsrr函数
2015/05/27 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
php魔术方法功能与用法实例分析
2016/10/19 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
2019/06/03 PHP
Laravel框架实现即点即改功能的方法分析
2019/10/31 PHP
javascript div 遮罩层封锁整个页面
2009/07/10 Javascript
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
js判断输入字符串是否为空、空格、null的方法总结
2016/06/14 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
angular.js实现列表orderby排序的方法
2018/10/02 Javascript
详解基于vue-cli3快速发布一个fullpage组件
2019/03/08 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
2019/07/24 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
Pycharm激活方法及详细教程(详细且实用)
2020/05/12 Python
Python执行时间的几种计算方法
2020/07/31 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
video下autoplay属性无效的解决方法(添加muted属性)
2020/05/19 HTML / CSS
html5小程序飞入购物车(抛物线绘制运动轨迹点)
2020/10/19 HTML / CSS
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
家长给幼儿园的表扬信
2014/01/09 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
要账委托书范本
2014/09/15 职场文书
学校运动会简讯
2015/07/20 职场文书
pytorch查看网络参数显存占用量等操作
2021/05/12 Python
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android