Python3.2官方文档翻译--异常处理

2024-03-02 20:48

本文主要是介绍Python3.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句子里面内容。(在tryexcept关键字之间的语句)

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

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

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

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

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

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

... Pass

最后一个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... :keywordexcept语句保护的代码所抛出。

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

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

>>> try:

... raise Exception(spameggs)

... 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>

(spameggs)

(spameggs)

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

这篇关于Python3.2官方文档翻译--异常处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/767385

相关文章

解决Java异常报错:java.nio.channels.UnresolvedAddressException问题

《解决Java异常报错:java.nio.channels.UnresolvedAddressException问题》:本文主要介绍解决Java异常报错:java.nio.channels.Unr... 目录异常含义可能出现的场景1. 错误的 IP 地址格式2. DNS 解析失败3. 未初始化的地址对象解决

Python中CSV文件处理全攻略

《Python中CSV文件处理全攻略》在数据处理和存储领域,CSV格式凭借其简单高效的特性,成为了电子表格和数据库中常用的文件格式,Python的csv模块为操作CSV文件提供了强大的支持,本文将深入... 目录一、CSV 格式简介二、csv模块核心内容(一)模块函数(二)模块类(三)模块常量(四)模块异常

python利用backoff实现异常自动重试详解

《python利用backoff实现异常自动重试详解》backoff是一个用于实现重试机制的Python库,通过指数退避或其他策略自动重试失败的操作,下面小编就来和大家详细讲讲如何利用backoff实... 目录1. backoff 库简介2. on_exception 装饰器的原理2.1 核心逻辑2.2

详解如何在SpringBoot控制器中处理用户数据

《详解如何在SpringBoot控制器中处理用户数据》在SpringBoot应用开发中,控制器(Controller)扮演着至关重要的角色,它负责接收用户请求、处理数据并返回响应,本文将深入浅出地讲解... 目录一、获取请求参数1.1 获取查询参数1.2 获取路径参数二、处理表单提交2.1 处理表单数据三、

如何合理管控Java语言的异常

《如何合理管控Java语言的异常》:本文主要介绍如何合理管控Java语言的异常问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、Thorwable类3、Error4、Exception类4.1、检查异常4.2、运行时异常5、处理方式5.1. 捕获异常

ubuntu系统使用官方操作命令升级Dify指南

《ubuntu系统使用官方操作命令升级Dify指南》Dify支持自动化执行、日志记录和结果管理,适用于数据处理、模型训练和部署等场景,今天我们就来看看ubuntu系统中使用官方操作命令升级Dify的方... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。

Spring Boot Controller处理HTTP请求体的方法

《SpringBootController处理HTTP请求体的方法》SpringBoot提供了强大的机制来处理不同Content-Type​的HTTP请求体,这主要依赖于HttpMessageCo... 目录一、核心机制:HttpMessageConverter​二、按Content-Type​处理详解1.

浅谈Redis Key 命名规范文档

《浅谈RedisKey命名规范文档》本文介绍了Redis键名命名规范,包括命名格式、具体规范、数据类型扩展命名、时间敏感型键名、规范总结以及实际应用示例,感兴趣的可以了解一下... 目录1. 命名格式格式模板:示例:2. 具体规范2.1 小写命名2.2 使用冒号分隔层级2.3 标识符命名3. 数据类型扩展命

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows