Python异常学习笔记

作者:junjie 时间:2021-03-24 01:33:33 

异常(exceptions)是Python中一种非常重要的类型,它和语法错误不同,是在程序运行期间引发的错误。Python中内置了很多异常,如IOError,NameError,KeyboardInterrupt等,更多的异常可以点击这里。

异常的意义在于提供一种更加优雅的运行方式,例如用Python编写一个计算器,如果用户输入不能计算的对象,则可以抛出异常,并进行处理, 如下:


while True:
 try:
   x= int(input('Please In enter A number:'))
   print "Your Input is %s"%x
   break
 except Exception,e:
   print e

Python是一门面向对象的语言,异常本身也是对象, 用dir(Exception)查看Exception类的属性,如下:[‘__class__', ‘__delattr__', ‘__dict__', ‘__doc__', ‘__format__', ‘__getattribute__', ‘__getitem__', ‘__getslice__', ‘__hash__', ‘__init__', ‘__new__', ‘__reduce__', ‘__reduce_ex__', ‘__repr__', ‘__setattr__', ‘__setstate__', ‘__sizeof__','__str__', ‘__subclasshook__', ‘__unicode__', ‘args', ‘message'], 除开args和message外,其余的均为其内部属性, 其中args是传递给异常类的构造函数的一个类型为元祖的参数, 一些内置函数,如IOError需要它接收多个参数,其它的则直接是直接传递一个错误提示字符串。

Python的异常可以通过try语句来检查,任何在try语句块里的代码都会被监测,检查有无异常产生,except会根据输入检查异常的类型,并执行except内的代码。那么,这里就不禁要问问,except后面的两个参数到底是什么?如果第一个是错误的类型,那么第二参数呢?对其进行检测,发现它是属于Exception的实例,也就是说,它是由异常类产生的一个具体的异常对象。
那么,用户如果自定义一个异常呢?Python中规定,所有异常必须直接或者间接的继承自Exception类,如下,自定义的异常:


#!/usr/bin/env python
class MyError(Exception):
 def __init__(self,*args):
   self.value=args[0]
 def __str__(self):
   return repr(self.value)
def showname(*args):
 if args:
   print args
 else:
   raise MyError('Error: need 1 arguments at last, 0 Input')

把这个文件保存为showname.py,其它模块就可以引入调用showname函数,并对它执行的结果进行检测:


#!/usr/bin/env python
import showname
try:
 showname.showname()
except showname.MyError,e:
 print e

值得注意的几点是:1, python中用raise抛出异常; 2, 由于所有异常都是继承自Exception,所以,当不确定异常类型的时候,可以在except后面直接接Exception来捕获所有异常;3,由于异常的继承关系,异常内的所有属性都是可以被重定义的,也可以在自定义的异常上增加属性。

标签:Python,异常
0
投稿

猜你喜欢

  • 教你轻松掌握如何保护MySQL中的重要数据

    2008-12-19 17:42:00
  • 在ASP与ASP.NET之间共享对话状态(1)

    2008-09-02 12:18:00
  • Python matplotlib图例放在外侧保存时显示不完整问题解决

    2023-10-08 14:05:35
  • Django框架静态文件处理、中间件、上传文件操作实例详解

    2021-03-07 14:31:04
  • python3的pip路径在哪

    2023-01-27 14:15:39
  • 如何将数据访问页绑定到断开连接的 ADO 记录集上?

    2009-12-03 20:07:00
  • 为您解读CSS优先级

    2009-06-18 18:29:00
  • ASP生成柱型体,折线图,饼图源代码

    2007-09-20 12:56:00
  • [翻译]标记语言和样式手册 Chapter 8 再谈清单

    2008-01-29 13:16:00
  • Python操作Excel把数据分给sheet

    2023-08-07 17:03:53
  • 手机版远程网站文件删除ASP程序

    2009-02-24 16:23:00
  • 微软建议的ASP性能优化28条守则(2)

    2008-02-22 17:02:00
  • 如何使用Python在2秒内评估国际象棋位置详解

    2023-08-10 14:26:46
  • Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例

    2023-08-21 18:51:04
  • Python timeit模块原理及使用方法

    2023-09-22 08:19:18
  • javascript面向对象编程(二)

    2008-03-07 12:59:00
  • 浅析Python 序列化与反序列化

    2023-05-01 14:36:16
  • Python操作word文档插入图片和表格的实例演示

    2023-09-20 08:21:09
  • CSS模块化设计—从空格谈起

    2007-12-15 09:41:00
  • python采集博客中上传的QQ截图文件

    2021-03-03 16:45:25
  • asp之家 网络编程 m.aspxhome.com