Python异常处理例题整理

什么是异常?

异常是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

运行结果:

如果想打印异常的信息,可以 设置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)

执行结果如下:

练习题:

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() 
(0)

相关推荐

  • Python异常处理知识点总结

    python提供了两个非常重要的功能来处理python程序在运行中出现的异常和错误.你可以使用该功能来调试python程序. 异常处理: 本站Python教程会具体介绍. 断言(Assertions):本站Python教程会具体介绍. python标准异常 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIteration 迭代器没有更

  • Python中的异常处理try/except/finally/raise用法分析

    本文实例分析了Python中的异常处理try/except/finally/raise用法.分享给大家供大家参考,具体如下: 异常发生在程序执行的过程中,如果python无法正常处理程序就会发生异常,导致整个程序终止执行,python中使用try/except语句可以捕获异常. try/except 异常的种类有很多,在不确定可能发生的异常类型时可以使用Exception捕获所有异常: try: pass except Exception, e: print Exception, ":"

  • 深入理解Python异常处理的哲学

    所谓异常指的是程序的执行出现了非预期行为,就好比现实中的做一件事过程中总会出现一些意外的事.异常的处理是跨越编程语言的,和具体的编程细节相比,程序执行异常的处理更像是哲学.限于认知能力和经验所限,不可能达到像解释器下import this看到的python设计之禅一样,本文就结合实际使用简单的聊一聊. 0. 前言 工作中,程序员之间一言不合就亮代码,毕竟不管是代码本身还是其执行过程,不会存在二义性,更不会含糊不清,代码可谓是程序员之间的官方语言.但是其处理问题的逻辑或者算法则并非如此. 让我至今

  • Python3.4学习笔记之类型判断,异常处理,终止程序操作小结

    本文实例讲述了Python3.4类型判断,异常处理,终止程序操作.分享给大家供大家参考,具体如下: python3.4学习笔记 类型判断,异常处理,终止程序,实例代码: #idle中按F5可以运行代码 #引入外部模块 import xxx #random模块,randint(开始数,结束数) 产生整数随机数 import random import sys import os secret = random.randint(1,10) temp = input("请输入一个数字\n")

  • Python学习笔记之读取文件、OS模块、异常处理、with as语法示例

    本文实例讲述了Python学习笔记之读取文件.OS模块.异常处理.with as语法.分享给大家供大家参考,具体如下: 文件读取 #读取文件 f = open("test.txt","r") print(f.read()) #打印文件内容 #关闭文件 f.close() 获取文件绝对路径:OS模块 os.environ["xxx"]  获取系统环境变量 os.getcwd 获取当前python脚本工作路径 os.getpid() 获取当前进程ID

  • python try 异常处理(史上最全)

    在程序出现bug时一般不会将错误信息显示给用户,而是现实一个提示的页面,通俗来说就是不让用户看见大黄页!!! 有时候我们写程序的时候,会出现一些错误或异常,导致程序终止. 为了处理异常,我们使用try...except 把可能发生错误的语句放在try模块里,用except来处理异常. except可以处理一个专门的异常,也可以处理一组圆括号中的异常, 如果except后没有指定异常,则默认处理所有的异常. 每一个try,都必须至少有一个except 在python的异常中,有一个万能异常:Exc

  • python爬虫之urllib,伪装,超时设置,异常处理的方法

    Urllib 1. Urllib.request.urlopen().read().decode() 返回一个二进制的对象,对这个对象进行read()操作,可以得到一个包含网页的二进制字符串,然后用decode()解码成html源码 2. urlretrieve() 将一个网页爬取到本地 3. urlclearup() 清除 urlretrieve()所产生的缓存 4. info() 返回一个httpMessage对象,表示远程服务器的头信息 5. getcode() 获取当前网页的状态码 20

  • Python异常处理例题整理

    什么是异常? 异常是Python对象,表示一个错误.当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行.在程序运行过程中,总会遇到各种各样的错误,有的错误是程序编写有问题造成的 还有一类错误是完全无法在程序运行过程中预测的:一切异常皆是对象 系统定义的异常: BaseException 所有异常的基类,父类 Exception 常规错误的基类 StandardError 所有的内建标准异常的基类,标准化错误 ImportError  导入模块错误 ArithmeticError

  • Python学习笔记整理3之输入输出、python eval函数

    1. python中的变量: python中的变量声明不需要像C++.Java那样指定变量数据类型(int.float等),因为python会自动地根据赋给变量的值确定其类型.如 radius = 20,area = radius * radius * 3.14159 ,python会自动的将radius看成"整型",area看成"浮点型".所以编程时不用再像之前那样小心翼翼的查看数据类型有没有出错,挺人性化的. 2. input和print: 先贴个小的程序 #

  • Python 异常处理的实例详解

    Python 异常处理的实例详解 与许多面向对象语言一样,Python 具有异常处理,通过使用 try...except 块来实现. Note: Python v s. Java 的异常处理 Python 使用 try...except 来处理异常,使用 raise 来引发异常.Java 和 C++ 使用 try...catch 来处理异常,使用 throw 来引发异常. 异常在 Python 中无处不在:实际上在标准 Python 库中的每个模块都使用了它们,并且 Python 自已会在许多不

  • 对于Python异常处理慎用“except:pass”建议

    翻译自StackOverflow中一个关于Python异常处理的问答. 问题:为什么"except:pass"是一个不好的编程习惯? 我时常在StackOverflow上看到有人评论关于except: pass的使用,他们都提到这是一个不好的Python编程习惯,应该避免.可我想知道为什么?有时候我并不在意出现的错误,而是只想让我的程序继续进行下去.就像这样: try: something except: pass 为什么这么使用except:pass不好?这背后的原因是什么,是不是因

  • python 容器总结整理

    python 容器总结整理 list 可变数组 tuple 不可变数组 dict 键值对(key-value)的字典(dictionary) 初始化: a={'lyt':90} 添加: a['zxw']=91 访问: 1.a[key] 不存在会出错 2.a.get(key) 不存在返回None 3.a.get(key,val1) 不存在返回指定的val1 ####判断: >>>key in a True/False 删除: a.pop(key) 存在返回对应的val,不存在报错 注意,k

  • Python异常处理操作实例详解

    本文实例讲述了Python异常处理操作.分享给大家供大家参考,具体如下: 一.异常处理的引入 >>>whileTrue: try: x = int(input("Please enter a number: ")) break exceptValueError: print("Oops! That was no valid number. Try again ") Please enter a number: y Oops!That was no

  • python异常处理和日志处理方式

    今天,总结一下最近编程使用的python异常处理和日志处理的感受,其实异常处理是程序编写时非常重要的一块,但是我一开始学的语言是C++,这门语言中没有强制要求使用try...catch语句,因此我通常编写代码的时候忽略了这一块,直到开始学习java的时候,发现好多时候编写代码必须加上try...catch 模块,然而我每次都不深入理解,仅仅使用eclipse自动补全功能加上try...catch模块,或者直接在类上加入throws Exception最省事,完全不用思考. 最近在编写python

  • python异常处理try except过程解析

    这篇文章主要介绍了python异常处理try except过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 某些时候我们能够预判程序可能会出现何种类型的错误,而此时我们希望程序继续执行而不是退出,此时就需要用到异常处理:下面是常用的几种异常处理方法 #通过实例属性 列表 字典构造对应的异常 class Human(object): def __init__(self, name, age, sex): self.name = name s

  • python异常处理、自定义异常、断言原理与用法分析

    本文实例讲述了python异常处理.自定义异常.断言原理与用法.分享给大家供大家参考,具体如下: 什么是异常: 当程序遭遇某些非正常问题的时候就会抛出异常:比如int()只能处理能转化成int的对象,如果传入一个不能转化的对象就会报错并抛出异常 常用的异常有: ValueError :传入无效的错误的参数 TypeError:进行了对类型无效的操作 IndexError:序列中没有此索引 NameError:使用未定义的变量 更多更具体的异常可以参考Python官方文档,读读官方文档更健康 异常

随机推荐