python 第8章 异常处理
2014-05-03 11:23
393 查看
Python 用异常对象来表示异常,遇到错误会引发异常程序回溯。python已经建立了许多的异常类方法,用户自己也建立自己异常类型
8.2.1 raise语句
如果不是继承的Exception的类或方法,想处理异常就需要借助raise语句
8.3 捕捉异常
屏蔽异常
>>>
illegal divided by zero
None
Traceback (most recent call last):
File "G:/New Knowledge/practice/python/test.py", line 16, in <module>
print z.calc("6/0")
File "G:/New Knowledge/practice/python/test.py", line 5, in calc
return eval(expr)
File "<string>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>>
illegal divided by zero
None
2
name 'count' is not defined
None
>>>
>>> cal(4,3)
1
go on well
cleaning up
>>> cal(4,0)
zero divided
cleaning up
>>> cal('3','sd')
cleaning up
Traceback (most recent call last):
File "<pyshell#47>", line 1, in <module>
cal('3','sd')
File "<pyshell#43>", line 3, in cal
print x/y
TypeError: unsupported operand type(s) for /: 'str' and 'str'
>>>
异常传递:
error in handle
Traceback (most recent call last):
File "G:/New Knowledge/practice/python/test.py", line 12, in <module>
ignore_exception()
File "G:/New Knowledge/practice/python/test.py", line 4, in ignore_exception
faulty()
File "G:/New Knowledge/practice/python/test.py", line 2, in faulty
raise Exception('Someting is wrong!!!')
Exception: Someting is wrong!!!
>>>
8.11 运用异常:
使用异常,效率更高
>>>
Description of John
age:15
Occupation:student
Description of John
age:15
Description of John
age:15
Occupation:student
Description of John
age:15
>>>
8.2.1 raise语句
如果不是继承的Exception的类或方法,想处理异常就需要借助raise语句
>>> raise "The information of error" Traceback (most recent call last): File "<pyshell#17>", line 1, in <module> raise "The information of error" TypeError: exceptions must be old-style classes or derived from BaseException, not str >>>
>>> import exceptions >>> dir(exceptions) ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFError', 'EnvironmentError', 'Exception', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '__doc__', '__name__', '__package__']
8.3 捕捉异常
>>> x = input() 10 >>> y = input() 0 >>> try: z=x/y print z except ZeroDivisionError: print "The num is zero!!!" The num is zero!!!
屏蔽异常
class MuffledCalculator: muffled = False def calc(self,expr): try: return eval(expr) except ZeroDivisionError: if self.muffled: print 'illegal divided by zero' else: raise z = MuffledCalculator() z.muffled = True print z.calc("6/0") z.muffled = False print z.calc("6/0")
>>>
illegal divided by zero
None
Traceback (most recent call last):
File "G:/New Knowledge/practice/python/test.py", line 16, in <module>
print z.calc("6/0")
File "G:/New Knowledge/practice/python/test.py", line 5, in calc
return eval(expr)
File "<string>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
>>>
class MuffledCalculator: muffled = False def calc(self,expr): try: return eval(expr) except ZeroDivisionError: if self.muffled: print 'illegal divided by zero' else: raise except (TypeError,NameError),e: print e z = MuffledCalculator() z.muffled = True print z.calc("6/0") z.muffled = False print z.calc("7/3") print z.calc("count")>>>
illegal divided by zero
None
2
name 'count' is not defined
None
>>>
def cal(x,y): try: print x/y except NameError: print "unknown name" except ZeroDivisionError: print 'zero divided' else: print "go on well" finally: print "cleaning up"
>>> cal(4,3)
1
go on well
cleaning up
>>> cal(4,0)
zero divided
cleaning up
>>> cal('3','sd')
cleaning up
Traceback (most recent call last):
File "<pyshell#47>", line 1, in <module>
cal('3','sd')
File "<pyshell#43>", line 3, in cal
print x/y
TypeError: unsupported operand type(s) for /: 'str' and 'str'
>>>
异常传递:
def faulty(): raise Exception('Someting is wrong!!!') def ignore_exception(): faulty() def handle_exception(): try: faulty() except: print 'error in handle' handle_exception() ignore_exception()
error in handle
Traceback (most recent call last):
File "G:/New Knowledge/practice/python/test.py", line 12, in <module>
ignore_exception()
File "G:/New Knowledge/practice/python/test.py", line 4, in ignore_exception
faulty()
File "G:/New Knowledge/practice/python/test.py", line 2, in faulty
raise Exception('Someting is wrong!!!')
Exception: Someting is wrong!!!
>>>
8.11 运用异常:
def describePerson1(person): print "Description of ",person['name'] print 'age:%(age)s'%person if 'Occupation' in person: print 'Occupation:%(Occupation)s'%person def describePerson2(person): print "Description of ",person['name'] print 'age:%(age)s'%person try: print 'Occupation:%(Occupation)s'%person except:pass d = {'name':'John','age':15,'Occupation':'student'} t = {'name':'John','age':15} describePerson1(d) describePerson1(t) describePerson2(d) describePerson2(t)
使用异常,效率更高
>>>
Description of John
age:15
Occupation:student
Description of John
age:15
Description of John
age:15
Occupation:student
Description of John
age:15
>>>
相关文章推荐
- python 第8章 异常处理
- [Python学习笔记][第八章Python异常处理结构与程序调试]
- Python处理异常
- 【】Python】异常处理try...except、raise
- Python 中的异常处理
- Python异常处理
- python笔记12--异常处理
- python异常处理和面向对象编程总结
- [Python]网络爬虫(三):异常的处理和HTTP状态码的分类
- python异常处理
- python的异常处理流程
- Python菜鸟学习手册11----异常处理
- Python标准异常和异常处理详解
- python 异常处理 断言
- Python异常处理和反射
- (Python)异常处理try...except、raise
- python简单执行异常处理
- Python异常处理实例
- Python的异常处理
- Python的异常处理