Python异常处理例题整理


Posted in Python onJuly 07, 2019

什么是异常?

异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。在程序运行过程中,总会遇到各种各样的错误,有的错误是程序编写有问题造成的

还有一类错误是完全无法在程序运行过程中预测的:一切异常皆是对象

系统定义的异常:

  • BaseException 所有异常的基类,父类
  • Exception 常规错误的基类
  • StandardError 所有的内建标准异常的基类,标准化错误
  • ImportError  导入模块错误
  • ArithmeticError 所有数值计算错误的基类
  • FloatingPointError 浮点计算错误
  • AssertionError  断言语句失败
  • AttributeError  对象没有这个属性
  • Warning 警告的基类警告类

也可以自定义异常,创建类,

异常处理的作用是:

1:不想让程序终止

2:如果出错了,需要特殊处理

异常处理的语法是:try/except语句,有的后面也会加else

try:
  a = 2
  b = 0
  print a / b
except:
  print '出错啦!!!'

print 1111

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

a=10
b=1
try:
  c = b/ a
  print c
except (IOError ,ZeroDivisionError),x:
  print x
else:
  print "no error"
print "done"

使用except而不带任何异常类型: except,后面不写,表示捕获所有异常

try:
  正常的操作
  ......................
except:
  发生异常,执行这块代码
  ......................
else:
  如果没有异常执行这块代码

使用except而带多种异常类型: except,后面写,捕获对应的异常,

except:

0.不写异常代表捕获一些类型的错误
1.可以一次捕捉多个异常 (exception1, exception2)
2.多个except:
不要求从小到大捕捉
3.可以在except语句块后面加一个else,当没有错误发生时,会自动执行else语句
4.e代表当前异常的实例 print可以显示错误信息  , e  or as e

5.如果想要输出详细堆栈信息,使用import traceback traceback.print_exc()

举例说明5:虽然错误堆栈信息打印出来了,但是程序还是在继续执行的

import traceback
try:
  print 5/0
except (TypeError,ZeroDivisionError) as e:
  traceback.print_exc()
  print e.message
else:
  print 3
print 2

运行结果:

Python异常处理例题整理

如果想打印异常的信息,可以 设置as 别名,然后通过别名.message,来捕获异常信息,如下例子所示

try:
  正常的操作
  ......................
except(Exception1[, Exception2[,...ExceptionN]]]):
  发生以上多个异常中的一个,执行这块代码
  ......................
else:
  如果没有异常执行这块代码
except ZeroDivisionError: ##捕获被除数不能等于0的异常
except BaseException:##也可以直接写这个所有异常的基类
try:
  a = 2
  b = 0
  print a / b
except ZeroDivisionError as e :
  print e.message #捕获异常信息
  print '出错啦!!!'

print 1111

执行结果:

integer division or modulo by zero
出错啦!!!

1111

try except的两个作用:

  • 可以提高代码健壮性,
  • 捕获异常,巧妙的避开报错的信息

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

try:
<语句>
finally:
<语句>  #退出try时总会执行
raise

finally: # 不管try except是否出错,都会打印出finally文件里面的东西,可以看下如下例子:

1:如果try里面东西没有执行成功,try里面的print也不会打印的,

2:finally里面的东西不管try except是否出错,都会打印

def jianfa(a,b):
  if a<b:
    raise BaseException('被减数不能小于减数')
    #return 0
  else:
    return a-b
try:
  print jianfa(0, 3)
  print 'huice' #不打印
except:
  pass
finally:
  print 111

抛出异常

抛出解释:如果错误没有被捕获,它就会一直往上抛,最后被Python解释器捕获,打印一个错误信息,然后程序退出:语法:raise 异常类名 (错误信息)

练习题:#1.编写一个计算减法的方法,当第一个数小于第二个数时,抛出“被减数不能小于减数"的异常

def jianfa(a,b):
  if a<b:
    raise BaseException('被减数不能小于减数')
    #return 0
  else:
    return a-b
print jianfa(1, 3)

执行结果如下:

Python异常处理例题整理

练习题:

1.从开发的代码库中得到一组数据,表示每个文件的代码变更情况

{'login.py': 'a 8 d 2 u 3', 'order.py': 'a 15 d 0 u 34', 'info.py': 'a 1 d 20 u 5'}

其中 a表示新增行数,d表示删除行数,u表示修改行数。login.py的变更行数为13

要求:统计出每个文件的变更行数

第一种方法:通过if语句,判断

data={'login.py': 'a 8 d 2 u 3', 'order.py': 'a 15 d 0 u 34', 'info.py': 'a 1 d 20 u 5'}
for k,v in data.items():
  sum=0
  for x in data[k].split(' '):
    if x.isdigit():
      sum+=int(x)
  print '文件:%s,共变更%d行'%(k,sum)

执行结果:

文件:login.py,共变更13行
文件:info.py,共变更26行

文件:order.py,共变更49行

第二种方法:通过try 方法:

data={'login.py': 'a 8 d 2 u 3', 'order.py': 'a 15 d 0 u 34', 'info.py': 'a 1 d 20 u 5'}
for k,v in data.items():
  sum=0
  for x in data[k].split(' '):
    try:
      sum+=int(x) #通过try except方法捕获异常,巧妙的实现
    except:
      pass
  print '文件:%s,共变更%d行'%(k,sum)

2 定义一个函数func(listinfo) listinfo:为列表,listinfo = [133, 88, 24, 33, 232, 44, 11, 44],返回列表小于100,且为偶数的

def func(listinfo):
  for x in listinfo:
    try:
      result = filter(lambda k: k < 100 and k % 2 == 0, listinfo)
    except Exception as a:
      return a
    else:
      return result
print func([133, 88, 24, 33, 232, 44, 11, 44])

输出:[88, 24, 44, 44]

class my_error(Exception):
  def __init__(self, stri):
    self.leng = len(stri)

  def process(self):
    if self.leng < 5:
      return 'The input is of length %s,expecting at least 5' % self.leng
    else:
      return 'print success'


try:
  raise my_error('sssss')
except my_error as e:
  print e.process()
Python 相关文章推荐
基于Python_脚本CGI、特点、应用、开发环境(详解)
May 23 Python
基于python(urlparse)模板的使用方法总结
Oct 13 Python
Python方法的延迟加载的示例代码
Dec 18 Python
python脚本作为Windows服务启动代码详解
Feb 11 Python
python读取csv文件并把文件放入一个list中的实例讲解
Apr 27 Python
Python 获取主机ip与hostname的方法
Dec 17 Python
Python进程间通信 multiProcessing Queue队列实现详解
Sep 23 Python
Python3标准库glob文件名模式匹配的问题
Mar 13 Python
基于CentOS搭建Python Django环境过程解析
Aug 24 Python
Python urllib request模块发送请求实现过程解析
Dec 10 Python
python实现文件+参数发送request的实例代码
Jan 05 Python
python的变量和简单数字类型详解
Sep 15 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
Jul 07 #Python
在python中实现调用可执行文件.exe的3种方法
Jul 07 #Python
Python求两点之间的直线距离(2种实现方法)
Jul 07 #Python
对Python中画图时候的线类型详解
Jul 07 #Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 #Python
Python正则表达式匹配日期与时间的方法
Jul 07 #Python
python pickle存储、读取大数据量列表、字典数据的方法
Jul 07 #Python
You might like
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
2011/11/23 PHP
PHP 图片水印类代码
2012/08/27 PHP
PHP简单实现DES加密解密的方法
2016/07/12 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
2011/02/25 Javascript
JavaScript中的关键字&quot;VAR&quot;使用详解 分享
2013/07/31 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
2017/06/16 Javascript
JS仿QQ好友列表展开、收缩功能(第一篇)
2017/07/07 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
微信小程序开发背景图显示功能
2018/08/08 Javascript
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
Python编写检测数据库SA用户的方法
2014/07/11 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
python3实现mysql导出excel的方法
2019/07/31 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
Python 实现一个计时器
2020/07/28 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
美国最大的香水出口:FragranceX.com
2017/11/04 全球购物
个人党性剖析材料
2014/02/03 职场文书
人事部经理岗位职责
2014/03/07 职场文书
2015年“我们的节日·重阳节”活动总结
2015/07/29 职场文书
2016年秋季趣味运动会开幕词
2016/03/04 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript