现在的位置: 主页 > 公司荣誉 > 文章列表

((Python基础教程))学习笔记 - 第08章 - 异常

作者:石家庄绿之洲商贸有限公司 来源:www.365tt315.com 未知发布时间:2017-09-11 13:51:54
((Python基础教程))学习笔记 | 第08章 | 异常

------

什么是异常:Python用异常对象(exception object)来表示异常情况.如果异常信息未被处理或捕捉。程序就会用回潄来终止执行

>>> 1/0 Traceback (most recent call last): #Traceback: 一种错误信息 File "", line 1, in ? ZeroDivisionError: integer division or modulo by zero每个异常都是一些类的实例,这些实例可以被引发,并且可以用很多方式去捕捉,使得程序可以抓住错误并对其进行处理,而不是让整个程序失败.

Note:ZeroDivisionError:就是一个实例

------

按照自己的方式出错

raise语句:

为了引发异常,可以使用一个类或者实例参数调用raise语句。使用类时,程序会自动创建实例,下面是一些简单的例子,使用了内建的Exception异常类

#引发一个没有任何信息的普通异常

>>> raise Exception Traceback (most recent call last): File "", line 1, in ? Exception#引发一个带错误信息的普通异常 >>> raise Exception,"This is a normal Exception" Traceback (most recent call last): File "", line 1, in ? Exception: This is a normal Exception#也可以这么写>>> raise Exception('System device Busy...') Traceback (most recent call last): File "", line 1, in ? Exception: System device Busy...内建的异常很多,大部分可以再exceptions模块里面找到,可以用dir来列出模块的内容>>> dir(exceptions) ['ArithmeticError', 'AssertionError', 'AttributeError', 'DeprecationWarning', 'EOFError', 'EnvironmentError', 'Exception', 'FloatingPointError', 'FutureWarning', 'IOError', 'ImportError', 'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'NotImplementedError', 'OSError', 'OverflowError', 'OverflowWarning', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__doc__', '__name__']Note:

1.所有这些异常都可以用在raise语句中.

2. 最重要的一些内建异常类


------

自定义异常类:

如果内建的异常类不能满足需要,那么就需要独立于exceptions外的异常类,也就是自定义类.

可以添加异常类,像下面的模式

>>> class customerException(Exception): pass#可以往里面添加方法

------

捕捉异常

异常最有用的地方是能被捕捉,可以用try/except来实现,比如说很两个数相除

>>> x = input('Enter the first number:') Enter the first number:10 >>> y = input('Enter the second number:') Enter the second number:0 >>> print x/y Traceback (most recent call last): File "", line 1, in ? ZeroDivisionError: integer division or modulo by zero.为了捕捉异常并做出一些处理,可以这样重写程序>>> try: ... x = input('Enter the 1st number:') ... y = input('Enter the 2nd number:') print x/y ... except ZeroDivisionError: ... print "The second number can't be zero!" ... Enter the 1st number:10 Enter the 2nd number:0 The second number can't be zero!Note: 如果没有捕捉异常,它就会被传播到调用它的函数中,如果依然没有捕获,这些异常就会浮到程序的最顶层,

也就是说你可以捕捉到在其他人的函数所引发的异常。

------

看,没有参数

如果捕捉到异常,又想重新引发它,那么就可以调用不带参数的raise,举个例子吧,看这么做,多有用!考虑一个能屏蔽ZeroDivisionError的计算器类,如果这个错误被激活,计算器就会打印出错误,而不是让异常传播,如果这是在用户交互的过程中使用,这就非常有用,但是,如果在程序内部使用,引发异常会更好些,那么屏蔽机制就可以关掉。下面是这样一个类的代码

class MuffledCalculator: muffled = False def cal(self,expr): try: return eval(expr) except ZeroDivisionError: if self.muffled: print 'Division by zero is illegal' else: raise

输出结果

>>> c = MuffledCalculator() >>> c.cal('10/2') 5 >>> c.cal('10/0') Traceback (most recent call last): File "", line 1, in c.cal('10/0') File "D:\Learn\Python\Exception.py", line 13, in cal return eval(expr) File "", line 1, in ZeroDivisionError: integer division or modulo by zero >>> c.muffled = True >>> c.cal('10/0') Division by zero is illegal------

多个except语句

>>> x = input('Enter the 1st number:') Enter the 1st number:10 >>> y = input('Enter the 2nd number:') Enter the 2nd number:'hello,world!' >>> >>> print x/y Traceback (most recent call last): File "", line 1, in ? TypeError: unsupported operand type(s) for /: 'int' and 'str'那么应该这么写:try: x = input('Enter the 1st number:') y = input('Enter the 2nd number:') print x/y except ZeroDivisionError: print "The second number can't be zero!" except TypeError: print "That wasn't a number, was it?"------

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网络推广 https://www.feimao666.com

上一篇:什么是垂直搜索? 下一篇:最后一页