《Python参考手册(第4版•修订版)》——1.15 异常

简介:

本节书摘来自异步社区《Python参考手册(第4版•修订版)》一书中的第1章,第1.15节,作者David M. Beazley,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.15 异常

如果程序中出现错误,就会引发异常,并显示类似下面的回溯消息:

Traceback (most recent call last): 
 File "foo.py", line 12, in <module>
IOError: [Errno 2] No such file or directory: 'file.txt'

该回溯消息指出了所发生的错误类型及位置。通常情况下,错误会导致程序终止。但是可以使用try和except语句捕捉并处理异常,如下所示:

try:
    f = open("file.txt","r")
except IOError as e:
    print e

如果出现IOError,引发错误的详细信息将被放在对象e中,然后控制权被传递给except代码块中的代码。如果出现其他类型的异常,对象e将被传递给用于处理这些异常的代码块(如果有的话)。如果没有出现错误,except代码块中的代码将被忽略。处理完异常后,程序将继续执行紧跟在最后一个except代码块后面的语句。程序不会返回到发生异常的位置。

raise语句用于手工引发异常。引发异常时,可以使用任意一个内置异常,如下所示:

raise RuntimeError("Computer says no")

你也可以创建自己的异常,这将在5.4.2节中详细介绍。

在进行异常处理时,如何正确地管理系统资源(如锁、文件和网络连接)通常是一个棘手的问题。为了简化此类编程,可以对某些种类的对象使用with语句。下面的例子给出了使用互斥锁的代码:

import threading 
message_lock = threading.Lock()
...
with message_lock:
    messages.add(newmessage)

在这个例子中,with语句执行时会自动获取message_lock对象。当执行离开with代码块上下文后,锁将被自动释放。不管with代码块内部发生了什么,都会出现这种管理行为。例如,如果出现一个异常,当控制离开代码块环境时锁也将被释放。

with语句通常只适用于与系统资源或执行环境相关的对象,如文件、连接和锁。但是,用户定义的对象也可以定义自己的自定义处理机制。这一点将在3.9.11节中详细介绍。

相关文章
|
3月前
|
Python
Python学习 -- 异常堆栈追踪技术
Python学习 -- 异常堆栈追踪技术
28 0
|
3月前
|
Python
Python学习 -- 异常捕获技巧
Python学习 -- 异常捕获技巧
20 0
|
1月前
|
开发者 UED Python
怎么理解python中的错误和异常
怎么理解python中的错误和异常
25 0
|
7天前
|
Python
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)(上)
44 0
|
14天前
|
开发者 Python
使用python打印异常
Python的try-except用于异常处理,尝试执行try块中的代码,若出现异常,则由except捕获并处理。示例展示了当尝试除以零引发`ZeroDivisionError`时,如何打印异常信息。使用`traceback`模块可获取更详尽的异常堆栈信息。在实际应用中,异常信息应根据需求写入日志或发送给开发者,避免向用户暴露敏感信息。
11 0
|
20天前
|
Python
Python中异常的抛出与捕获
4月更文挑战第3天,Python中的异常是处理错误的方式,当错误发生时,异常被触发,未被捕获则导致程序终止。通过`raise`可手动抛出异常,例如`raise ValueError("Invalid value provided")`或自定义异常。使用`try-except`捕获异常,避免程序意外结束。`try`块包含可能出错的代码,`except`块处理特定异常,`else`子句在无异常时执行,`finally`子句确保清理代码始终执行。
17 2
Python中异常的抛出与捕获
|
1月前
|
Python
在Python中文件异常
在Python中文件异常
13 1