#Chapter 8 异常
Python 2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
#8.1 什么是异常
>>> 1/0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
#8.2 按自己的方式出错
#8.2.1 raise语句
>>> raise Exception
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception
>>> raise Exception('hyperdrive overload')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Exception: hyperdrive overload
>>> import exceptions
>>> dir(exceptions)
['ArithmeticError', 'AssertionError', 'AttributeError', ...]
>>> raise ArithmeticError
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ArithmeticError
#8.2.2 自定义异常类
>>> class SomeCustomException(Exception): pass
...
#8.3 捕捉异常
try:
x=input('Enter the first number: ')
y=input('Enter the second number: ')
print x/y
except ZeroDivisionError:
print "The second number can't be zero!"
#打开或关闭屏蔽
class MuffleCalculator:
muffled = False
def calc(self, expr):
try:
return eval(expr)
except ZeroDivisionError:
if self.muffled:
print 'Division by zero is illegal'
else:
raise
calculator=MuffleCalculator()
print calculator.calc('10/2')
#print calculator.calc('10/0') # No muffling
#5
#Traceback (most recent call last):
# File "tta.py", line 14, in <module>
# print calculator.calc('10/0') # No muffling
# File "tta.py", line 5, in calc
# return eval(expr)
# File "<string>", line 1, in <module>
#ZeroDivisionError: integer division or modulo by zero
calculator.muffled=True
calculator.calc('10/0')
#Division by zero is illegal
#8.4 不止一个 except 语句
try:
x=input('Enter the first number: ')
y=input('Enter the second number: ')
print x/y
except ZeroDivisionError:
print "The second number can't be zero!"
except TypeError:
print "That wasn't a number, was it?"
#8.5 用一个块捕捉两个异常
try:
x=input('Enter the first number: ')
y=input('Enter the second number: ')
print x/y
except (ZeroDivisionError, TypeError, NameError):
print 'Your numbers are bogus...'
#8.6 捕捉对象
try:
x=input('Enter the first number: ')
y=input('Enter the second number: ')
print x/y
except (ZeroDivisionError, TypeError, NameError), e:
print e
#在Python 3.0 中, except子句会被写作 except (ZeroDivisionError, TypeError, NameError) as e
#8.7 真正的全捕捉
try:
x=input('Enter the first number: ')
y=input('Enter the second number: ')
print x/y
except:
print 'Something wrong happened...'
>>> 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 "<stdin>", line 1, in <module>
ZeroDivisionError: integer division or modulo by zero
#8.8 万事大吉
>>> try:
... print 'A simple task'
... except:
... print 'What? Something went wrong?'
... else:
... print 'Ah... It went as planned.'
...
A simple task
Ah... It went as planned.
#只要有错误发生, 程序会不断要求重新输入
while True:
try:
x=input('Enter the first number: ')
y=input('Enter the second number: ')
value = x/y
print 'x/y is', value
except:
print 'Invalid input. Please try again.'
else:
break
#python ttb.py
#Enter the first number: 1
#Enter the second number: 0
#Invalid input. Please try again.
#Enter the first number: 'foo'
#Enter the second number: 'bar'
#Invalid input. Please try again.
#Enter the first number: baz
#Invalid input. Please try again.
#Enter the first number: 10
#Enter the second number: 2
#x/y is 5
#打印更加有用的错误信息:
while True:
try:
x=input('Enter the first number: ')
y=input('Enter the second number: ')
value = x/y
print 'x/y is', value
except Exception, e:
print 'Invalid input:', e
print 'Please try again'
else:
break
#python ttc.py
#Enter the first number: 1
#Enter the second number: 0
#Invalid input: integer division or modulo by zero
#Please try again
#Enter the first number: 'x'
#Enter the second number: 'y'
#Invalid input: unsupported operand type(s) for /: 'str' and 'str'
#Please try again
#Enter the first number: quuux
#Invalid input: name 'quuux' is not defined
#Please try again
#Enter the first number: 10
#Enter the second number: 2
#x/y is 5
#8.8 最后
>>> x=None
>>> try:
... x = 1/0
... finally:
... print 'Cleaning up...'
... del x
...
Cleaning up...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ZeroDivisionError: integer division or modulo by zero
>>>
>>> try:
... 1/0
... except NameError:
... print 'Unknown variable'
... else:
... print 'That went well!'
... finally:
... print 'Cleaning up.'
...
Cleaning up.
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
ZeroDivisionError: integer division or modulo by zero
#异常和函数
>>> def faulty():
... raise Exception('Someting is wrong')
...
>>> def ignore_exception():
... faulty()
...
>>> def handle_exception():
... try:
... faulty()
... except:
... print 'Exception handled'
...
>>>
>>> ignore_exception()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in ignore_exception
File "<stdin>", line 2, in faulty
Exception: Something is wrong
>>>
>>> handle_exception()
Exception handled
>>>
#8.11 异常之禅
>>> def describePerson(person):
... print 'Description of', person['name']
... print 'Age:', person['age']
... if 'occupation' in person:
... print 'Occupation:', person['occupation']
...
def describePerson(person):
print 'Description of', person['name']
print 'Age:', person['age']
try:
print 'Occupation: ' + person['occupation']
except KeyError: pass
person = {'name':'Jonathan', 'age':33}
describePerson(person)
#python ttd.py
#Description of Jonathan
#Age: 33
person = {'name':'Jonathan', 'age':33, 'occupation':'IBIT Support'}
describePerson(person)
#python ttd.py
#Description of Jonathan
#Age: 33
#Occupation: IBIT Support
#8.12 小结
# 异常对象
# 引发异常
# 自定义异常类
# 捕捉异常: 使用try语句的except子句捕捉异常. 如果在except子句中不特别指定异常类, 那么所有的异常都会被捕捉.
# 异常可以放在 元组 中以实现多个异常的指定.
# 如果给except提供两个参数, 第二个参数就会绑定到 异常对象 上
# 在一个try语句中,可以包含多个except子句, 用来分别处理不同的异常
#else子句 如果主块try中没有发生异常, else子句就会被执行
#finally子句-- 如果需要确保某些代码不管是否有异常引发都要执行(比如清理代码, 关闭文件, 关闭网络套接字, 关闭数据库连接),
# 那么这些代码可以放置在finally子句中
#异常和函数 在函数内引发异常时, 它就会被传播到函数调用的地方(对于方法也是一样)
#8.12.1 新函数
# warnings.filterwarning(action....) 用于过滤警告
#Exception 所有异常的基类
#AttributeError 特性引用或赋值失败时引发
#IOError 试图打开不存在的文件(包括其他情况)时引发
#IndexError 在使用序列中不存在的索引时引发
#KeyError 在使用映射中不存在的键时引发
#NameError 在找不到名字(变量)时引发
#SyntaxError 在代码为错误形式时引发
#TypeError 在内建操作或函数应用于错误类型的对象时引发
#ValueError 在内建操作或函数应用于正确类型的对象,但该对象使用不合适的值时引发
#ZeroDivisionError 在除法或模除操作的第二个参数为0时引发
分享到:
相关推荐
**Python基础教程第三版概述** Python是一种高级编程语言,以其简洁、易读的语法和强大的功能而闻名。作为初学者入门编程或者专业人士增强技能的工具,Python基础教程第三版是学习这一语言的理想资源。该高清版教程...
《Python基础教程第二版》是针对初学者的一本经典教材,尤其适合那些对Python 2.0版本感兴趣的读者。本书全面、深入地介绍了Python编程语言的基础概念和语法,旨在帮助读者掌握这一强大而灵活的编程工具。以下是根据...
《Python基础教程》第三版源代码是一份详细的学习资源,涵盖了Python编程的多个核心概念和实践技巧。这个源代码集合包括了从基础语法到高级特性的各种示例,旨在帮助初学者逐步掌握Python编程。 在Python的基础部分...
第8章 异常 第9章 魔法方法、属性和迭代器 第10章 充电时刻 第11章 文件和素材 第12章 图形用户界面 第13章 数据库支持 第14章 网络编程 第15章 Python和万维网 第16章 测试 第17章 扩展Python 第18章 ...
Python基础入门教程 Python语言编程导论08 第八章 面向对象编程 (共114页).ppt Python基础入门教程 Python语言编程导论09 第九章 异常处理与程序调试 (共56页).ppt Python基础入门教程 Python语言编程导论10 ...
《Python基础教程(第2版·修订版)2014》是一本针对初学者的Python编程指南,它深入浅出地介绍了Python语言的核心概念和语法。这本书在2014年进行了修订,以适应Python语言的发展和变化,相较于2010年的版本,它...
《Python基础教程(第二版)》是一本深受Python初学者喜爱的经典教材,它以其清晰的讲解和丰富的示例引领读者逐步掌握Python编程的基础知识。源代码.zip文件包含了本书中的所有实例代码,是学习过程中不可或缺的参考...
【课程列表】 Python基础入门教程 由浅入深讲解清晰 第1章 ...Python基础入门教程 由浅入深讲解清晰 第8章 异常处理结构与程序调试 (共44页).ppt Python基础入门教程 由浅入深讲解清晰 第9章 GUI编程 (共43页).ppt
"Python基础教程第二版"是学习Python语言的经典教材,由专家编写,旨在为初学者提供全面而深入的Python知识。这本书包含了Python的基础概念、语法结构、数据类型、控制结构、函数、模块和包、面向对象编程以及错误...
Python基础入门教程 Python语言编程导论08 第八章 面向对象编程 (共114页).ppt Python基础入门教程 Python语言编程导论09 第九章 异常处理与程序调试 (共56页).ppt Python基础入门教程 Python语言编程导论10 ...
Python基础入门教程 Python语言编程导论08 第八章 面向对象编程 (共114页).ppt Python基础入门教程 Python语言编程导论09 第九章 异常处理与程序调试 (共56页).ppt Python基础入门教程 Python语言编程导论10 ...
【课程列表】 Python基础入门教程 由浅入深讲解清晰 第1章 ...Python基础入门教程 由浅入深讲解清晰 第8章 异常处理结构与程序调试 (共44页).ppt Python基础入门教程 由浅入深讲解清晰 第9章 GUI编程 (共43页).ppt
《Python基础教程》是Martin Hetland所著的一本经典教材,第二版更是对初学者和有一定经验的开发者提供了深入浅出的Python知识讲解。 在这一版的源代码中,读者可以找到书中各章节实例的实现,这对于理解Python编程...
Python基础入门教程 Python语言编程导论08 第八章 面向对象编程 (共114页).ppt Python基础入门教程 Python语言编程导论09 第九章 异常处理与程序调试 (共56页).ppt Python基础入门教程 Python语言编程导论10 ...
Python基础入门教程 Python语言编程导论08 第八章 面向对象编程 (共114页).ppt Python基础入门教程 Python语言编程导论09 第九章 异常处理与程序调试 (共56页).ppt Python基础入门教程 Python语言编程导论10 ...
《Python基础教程(第2版·修订版)》是一本为初学者设计的Python编程教材,旨在帮助读者全面掌握Python编程基础知识。这本书详尽地介绍了Python语言的核心概念、语法结构以及编程实践,是学习Python编程的绝佳参考...
《Python基础教程》第三版是Python编程初学者的宝贵资源,由知名...无论你是自学还是在课堂上学习,这个珍藏版的《Python基础教程》第三版都是一个值得拥有的资源,它将引导你步入Python编程的世界,开启你的编程之旅。
《Python3基础教程(第2版)(慕课版)》是一份全面介绍Python编程语言的教育资源,适合初学者入门。这份教程通过一系列PPT形式的章节,详细讲解了Python3的基本语法和常用功能。以下是根据提供的压缩包文件名列表...
Python基础入门教程 Python语言编程导论08 第八章 面向对象编程 (共114页).ppt Python基础入门教程 Python语言编程导论09 第九章 异常处理与程序调试 (共56页).ppt Python基础入门教程 Python语言编程导论10 ...
"Python基础教程第2版"是一本专为初学者和有经验的程序员设计的指南,旨在帮助读者深入理解和掌握Python的核心概念和技术。这本书是Python教程的经典之作,提供了全面且深入的Python知识讲解。 在Python中,学习...