Python 3.2官方文档翻译:异常处理

8.3 异常处理

编写可以处理可选择的异常是可能的。 看看下面的例子,要求用户输入一个合法的整数类型,但是允许用户打断程序()用control-c或者其他操作系统支持的语言;注意一个用户产生的终端会引发一个keyboardInterrupt 异常。

>>> while True:

... try:

... x = int(input("Please enter a number: "))

... break

... except ValueError:

... print("Oops! That was no valid number. Try again...")

...

Try语句如下工作:

l 首先,执行try句子里面内容。(在try和except关键字之间的语句)

l 如果没有异常发生,except语句就会跳过,try语句执行就结束。

l 如果在执行try语句过程中异常发生,剩下的语句就会跳过。 如果发生的 异常名称和except关键字之后的异常相同, except语句就会执行,它时在try语句之后执行的。

l 如果发生没有与except语句异常名称相匹配的异常,它就传递给try语句外部。如果发现没有处理的异常,就会抛出没有处理的异常并且打印出如上面的异常信息。

l

为了具体处理不同的异常,Try语句可以包含许多except语句。在但最多只有一个异常处理。 处理器只能处理发生发生在相应的try语句中的异常。而不是相同的try中发生的其他异常。

一个execpt可能作为一个括号括起来的元组里,命名多个异常,例如:

... except (RuntimeError, TypeError, NameError):

... Pass

返回栏目页:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/extra/

最后一个except子句可以省略异常名称,以作为通配符使用。你需要谨慎使用这个。因为用这种方式很容易隐藏一个实际的程序错误。可以使用这种方法打印一条错误信息,然后重新抛出异常。(允许调用这处理这个异常)

import sys

try:

f = open(’myfile.txt’)

s = f.readline()

i = int(s.strip())

except IOError as err:

print("I/O error: {0}".format(err))

except ValueError:

print("Could not convert data to an integer.")

except:

print("Unexpected error:", sys.exc_info()[0])

Raise

在try ... Except语句中也可以选择添加else语句,如果它存在,必须跟在所有except语句的后面,如果try语句不不想上抛一个异常但但又让接后的代码执行,那么这个语句就非常有用。例如:

for arg in sys.argv[1:]:

try:

f = open(arg, ’r’)

except IOError:

print(’cannot open’, arg)

else:

print(arg, ’has’, len(f.readlines()), ’lines’)

f.close()

 

使用else子句要比在try后面添加代码要好,因为它可以避免额外的捕捉异常。它们并不是由try... :keyword:except语句保护的代码所抛出。

当一个异常发生时,它可能有相关联的值,也可以成为异常的参数。参数的存在与类型依赖于异常的类型。

Except语句可以在异常名称后描述一个变量。这个变量与包含参数的异常实例相互绑定。为了方便起见,异常实例定义了_str_()方法以至于不需要调用参数.args可以直接打印参数。你也可以抛出异常前先实例化它,然后给它添加任何想要的属性。

>>> try:

... raise Exception(’spam’, ’eggs’)

... except Exception as inst:

... print(type(inst)) # the exception instance

... print(inst.args) # arguments stored in .args

... print(inst) # __str__ allows args to be printed directly,

... # but may be overridden in exception subclasses

... x, y = inst.args # unpack args

... print(’x =’, x)

... print(’y =’, y)

...

<class ’Exception’>

(’spam’, ’eggs’)

(’spam’, ’eggs’)

x = spam

y = eggs

 

如果异常还有参数,对于没处理的异常将会打印在异常信息中的最后一部分中。

异常处理器不仅仅处理那些try子句中立刻发生的异常,也会处理那些try子句中调用的函数内部发生的异常:例如::

>>> def this_fails():

... x = 1/0

...

>>> try:

... this_fails()

... except ZeroDivisionError as err:

... print(’Handling run-time error:’, err)

...

处理运行时的错误: int division or modulo by zero

时间: 2024-12-22 02:53:09

Python 3.2官方文档翻译:异常处理的相关文章

Python 3.2官方文档翻译:作用域和命名空间实例

下面的实例主要用来示范如何引用不同的作用域和命名空间,关键字global和nonlocalru如何影响变量绑定. 文档翻译:作用域和命名空间实例-python基础教程"> 实例运行结果是: After local assignment: test spam After nonlocal assignment: nonlocal spam After global assignment: nonlocal spam In global scope: global spam 注意局部赋值(这是

Python 3.2 官方文档翻译:错误与异常

第六章 错误和异常 直到现在错误信息还没有被涉及到.但你如果已经尝试了实例你可能已经看到一些相关信息.在python中至少有两种不同的错误:syntax errors 和exceptions 6.1 语法错误(syntax errors)   语法错误,也就是编译错误,当你开始学习python时,这种错误可能是你最常见的抱怨. >>> while True print('Hello world') File "<stdin>", line 1, in ?

Python 3.2官方文档翻译:作用域和命名空间

在介绍类之前,首先我想告诉你一些关于python作用域的规则.类的定义非常巧妙地运用了命名空间,你需要知道范围和命名空间的工作原理以能全面了解接下来发生的. 顺便说一下,关于这节讲到的知识对于任何优秀的python程序员非常有用. 让我们开始以一些定义开始. 命名空间(namespace)是一个从名称到对象的映射.大多命名空间目前用Python字典实现的,但那通常不会被注意(除非为了性能),在将来它可以改变.命名空间的例子是:内置名称的set(包含函数如abs()和内置异常名称):在模块中的全局

Python 3.2官方文档翻译之文件读写

5.2文件读写 Open()方法返回一个文件对象,在大多数情况下传递两个对象: open(filename, mode): 例如: >>> f = open('/tmp/workfile', 'w') 第一个参数是包含文件名称的字符串,第二个参数是包含描述文件使用方式的字符串.如果文件只读标记为"r",只写标记为"w"(相同名字的已经存在文件将会被清除),, "a"表示添加到文件结尾,数据就会自动的添加到文件的结尾."

Log4j官方文档翻译(一、基本介绍)

log4j是使用java语言编写的可靠的.快速的.灵活的日志框架,它是基于Apache的license. log4j支持c,c++,c#,perl,python,ruby等语言.在运行时通过额外的配置文件配置,提供不同的日志级别以及多种日志输出种类,比如数据库,文件,控制台,syslog等等. log4j有三个主要部分: loggers 负责捕获日志信息 appenders 负责输出信息到不同的目的地 layouts 负责使用不同的样式输出日志 log4j的特性: 线程安全 优化速度 基于命名的

《Spring Data 官方文档翻译》preface到2.requirements

Table of contents for 10 <Spring Data 官方文档翻译>preface到2.requirements 原文链接 前言 Spring Data Cassandra项目将核心Spring概念应用于使用Cassandra Columnar数据存储的开发解决方案. 我们提供了一个"模板"作为高级抽象用于存储和查询文档. 你会注意到其与Spring框架中的JDBC支持的相似之处. 1. 项目元数据 版本控制 – https://github.com/

python中的五种异常处理机制介绍_python

从几年前开始学习编程直到现在,一直对程序中的异常处理怀有恐惧和排斥心理.之所以这样,是因为不了解.这次攻python,首先把自己最畏惧和最不熟悉的几块内容列出来,里面就有「异常处理」这一项. <Dive into Python>并没有专门介绍异常处理,只是例子中用到的时候略微说明了一下.今天下载<Learn Python>,直接进异常处理这块.这一部分有四章,第一章讲解异常处理的一般使用方法,后面的章节深入地讨论其机制.我目前只看了第一章,先学会用,以后有必要的时候再扩展阅读. p

Log4j官方文档翻译(九、输出到数据库)

log4j提供了org.apache.log4j.JDBCAppender对象,可以把日志输出到特定的数据库. 常用的属性: bufferSize 设置buffer的大小,默认是1 driver 设置数据库的驱动字符串,比如sun.jdbc.odbc.OdbcDriver layout 设置使用的layout,默认是org.apache.log4j.PatternLayout password 设置数据的密码 sql 设置每次日志产生的时候执行的sql语句,可以是INSERT,UPDATE,DE

Log4j官方文档翻译(二、架构设计)

log4j遵循层次化架构,每个层都有不同的对象来执行不同的任务.这种层次话的结构灵活设计.易于未来的扩展. log4j框架中有两种对象: 核心对象:框架的支撑对象,是框架必不可少的组成部分. 支撑对象:这些是框架可选的对象,用于提供额外重要的工作. 核心对象包括下面几种类型: logger对象,是最高的层,负责通过不同的风格转化日志信息.它提供给appender对象发布前的信息.(这里的层是指所处的位置) layout对象,用于提供格式化日志信息的风格,在发布日志信息前,使其变得可读.可重用.