<cite id="fzn17"></cite>
<var id="fzn17"></var><cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var>
<menuitem id="fzn17"><span id="fzn17"><thead id="fzn17"></thead></span></menuitem>
<cite id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></cite><var id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></var>
<var id="fzn17"></var>
<menuitem id="fzn17"></menuitem>
<cite id="fzn17"><video id="fzn17"></video></cite>
|
|
51CTO旗下网站
|
|
移动端

2.5.1 异常(2)

《自学Python:编程基础、科学计算及数据分析》第2章Python 基础,在本章中,我们将学习Python 语言的基本使用,掌握Python 的基本使用方法,为后续的学习打下基础。本节为大家介绍异常。

作者:李金来源:机械工业出版社|2018-05-03 21:15

2.5.1 异常(2)

因此,下面的异常都会被except块处理:

  1. > 1   
  2. invalid value   
  3. > 0   
  4. invalid value   
  5. > -1   
  6. invalid value   
  7. > 2   
  8. 1 / log10(2.0) = 3.32192809489   
  9. > q 

2)第二种方式,我们可以在一个except块中声明多个异常类型:

  1. import math  
  2. while True:  
  3.     try:  
  4.    text = raw_input('> ')  
  5.    if text[0] == 'q':  
  6.    break  
  7.    x = float(text)  
  8.    y = 1 / math.log10(x)  
  9.    print "1 / log10({0}) = {1}".format(x, y)  
  10.     except (ValueError, ZeroDivisionError):  
  11.    print "invalid value" 

程序运行抛出其中?#25105;?#19968;种类型的异常都会被except块所处理。

3)第三种方式,通过多个 except块分别处理各种类型的异常,每个 except块负责处理一种类型的异常:

  1. import math  
  2. while True:  
  3.     try:  
  4.    text = raw_input('> ')  
  5.    if text[0] == 'q':  
  6.    break  
  7.    x = float(text)  
  8.    y = 1 / math.log10(x)  
  9.    print "1 / log10({0}) = {1}".format(x, y)  
  10.     except ValueError:  
  11.    print "the value must be greater than 0"  
  12.     except ZeroDivisionError:  
  13.    print "the value must not be 1" 

在这?#26234;?#20917;下,两种类型的异常会被程序分别处理:

  1. > 1   
  2. the value must not be 1   
  3. > -1   
  4.  
  5. the value must be greater than 0   
  6. > abcde   
  7. the value must be greater than 0   
  8. > 2   
  9. 1 / log10(2.0) = 3.32192809489   
  10. > q  

3.得到异常的具体信息

当我们输入字符串“abcde”时,上面的程序会提示: “the value must be greater than 0”,这与?#23548;?#24773;况不符。抛出 ValueError异常的部分并不是 math.log10()函数,而是float()函数。

调用 float('abcde')时,由于所给字符串不能转化为浮点数,Python会抛出一个“ValueError: could not convert string to float: abcde”的异常。这个异常包含两部分的内容:前面的部分表示异常的类型,后面的部分表示异常的具体说明。

在except块中,我们可以这样获得异常的具体信息:

  1. except SomeError as e:  
  2.     print e.message 

利用这种方式,我们首先将捕获到的异常保存在变量 e中,并用属性.message查看相关的说明信息。

为了得到异常的具体信息,修改except块的部分:

  1. import math  
  2. while True:  
  3.     try:  
  4.    text = raw_input('> ')  
  5.    if text[0] == 'q':  
  6.  
  7.    break  
  8.    x = float(text)  
  9.    y = 1 / math.log10(x)  
  10.    print "1 / log10({0}) = {1}".format(x, y)  
  11.  
  12.     except Exception as e:  
  13.    print e.message 

运行后,当我们输入非法值时,就能得到异常的具体信息:

  1. > 1   
  2. float division by zero   
  3. > -1   
  4. math domain error   
  5. > abcde   
  6. could not convert string to float: abcde   
  7. > 2   
  8. 1 / log10(2.0) = 3.32192809489   
  9. > q  

4.抛出异常

在程序运行过程中,我们可以使用关键字 raise抛出异常。

例如,当变量month为不合法的月份时抛出异常:

  1. if month > 12 or month < 1:   
  2.     raise ValueError("month must be between 1 and 12") 

抛出的异常类型为ValueError,括号中为具体说明信息。

5. finally关键字

异常处理时,我们还可以加入一个以关键字 finally开头的代码块,其作用为:不管try块中的代码是否抛出异常,finally块中的内容总是会被执行。

没有异常时,finally块会在 try块的代码执?#22411;?#27605;后执行;出现异常时,finally块会在抛出异常前执行。因此,finally块可以用来作为程序抛出异常时的安全保证,比如确保打开的文件被正确关闭。

例如,一个没有异常的finally块:

  1. In [1]: try:  
  2.    ...:     print 1  
  3.    ...: finally:  
  4.    ...:     print 'finally was called.'  
  5.    ...:  
  6. 1  
  7. finally was called. 

抛出异常的try块,如果异常没有被处理,finally块在抛出异常之前执行:

  1. In [2]: try:  
  2.    ...:     print 1 / 0  
  3.    ...: finally:  
  4.    ...:     print 'finally was called.'  
  5.    ...:  
  6. finally was called.  
  7. ZeroDivisionError    Traceback (most recent call last)  
  8. <ipython-input-13-87ecdf8b9265> in <module>()  
  9.  1 try:  
  10. ----> 2     print 1 / 0  
  11.  3 finally:  
  12.  4    print 'finally was called.'  
  13. ZeroDivisionError: integer division or modulo by zero 

?#19981;?#30340;朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你?#19981;?/dt>

订阅专栏+更多

活学活用 Ubuntu Server

活学活用 Ubuntu Server

实战直通车
共35章 | UbuntuServer

216人订阅学习

掌握Java核心

共30章 | 51CTO王波

83人订阅学习

Mysql DBA修炼之路

Mysql DBA修炼之路

MySQL入门到高阶
共24章 | 武凤涛

468人订阅学习

视频课程+更多

Filebeat+Redis+ELK6全实战视频教程

Filebeat+Redis+ELK6全实战视频教程

讲师:?#23548;?#21733;35156人学习过

windows驱动开发进阶篇-内核安全视频课程

windows驱动开发进阶篇-内核安全视频课程

讲师:masm64322866人学习过

Ansible+Jenkins自动化可视化运维视频教程

Ansible+Jenkins自动化可视化运维视频教程

讲师:?#23548;?#21733;40961人学习过

最新专题+更多

实感交互:人工智能下的人机交互技术
实感交互:人工智能下的人机交互技术

人工智能

精通TensorFlow
精通TensorFlow

TensorFlow

Yii2框架从入门到精通
Yii2框架从入门到精通

Yii2框架

Python3.6编程?#23548;改?-计算机科学入门(原书第3版)
Python3.6编程?#23548;改?-计算机科学入门(原书第3版)

Python3.6编程

精选博文
论坛热帖
下载排行

读 书 +更多

Java编程思想 第4版

本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、Java I...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客

澳洲幸运5官方
<cite id="fzn17"></cite>
<var id="fzn17"></var><cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var>
<menuitem id="fzn17"><span id="fzn17"><thead id="fzn17"></thead></span></menuitem>
<cite id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></cite><var id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></var>
<var id="fzn17"></var>
<menuitem id="fzn17"></menuitem>
<cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var><cite id="fzn17"><video id="fzn17"></video></cite>
<cite id="fzn17"></cite>
<var id="fzn17"></var>
<menuitem id="fzn17"><span id="fzn17"><thead id="fzn17"></thead></span></menuitem>
<cite id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></cite><var id="fzn17"><span id="fzn17"><var id="fzn17"></var></span></var>
<var id="fzn17"></var>
<menuitem id="fzn17"></menuitem>
<cite id="fzn17"><video id="fzn17"></video></cite>
福建11选5开到几点 3d试机号计划 福利彩票时时乐走势图带连线 排列3中奖规则及奖金 l山西11选5网上投注 六开彩开奖结果 黑龙江时时彩链接 上海时时走势图经网 四川时时平台网站 2019小彩票app大全