首页 > 编程语言 >python 异常处理

python 异常处理

时间:2023-02-23 20:57:35浏览次数:40  
标签:python 从句 except try 处理 print IOError 异常

异常

异常处理是一种艺术,一旦你掌握,会授予你无穷的力量。我将要向你展示我们能处理异常的一些方式。

最基本的术语里我们知道了try/except从句。可能触发异常产生的代码会放到try语句块里,而处理异常的代码会在except语句块里实现。这是一个简单的例子:

try:
    file = open('test.txt', 'rb')
except IOError as e:
    print('An IOError occurred. {}'.format(e.args[-1]))

上面的例子里,我们仅仅在处理一个IOError的异常。大部分初学者还不知道的是,我们可以处理多个异常。

处理多个异常

我们可以使用三种方法来处理多个异常。

第一种方法需要把所有可能发生的异常放到一个元组里。像这样:

try:
    file = open('test.txt', 'rb')
except (IOError, EOFError) as e:
    print("An error occurred. {}".format(e.args[-1]))

另外一种方式是对每个单独的异常在单独的except语句块中处理。我们想要多少个except语句块都可以。这里是个例子:

try:
    file = open('test.txt', 'rb')
except EOFError as e:
    print("An EOF error occurred.")
    raise e
except IOError as e:
    print("An error occurred.")
    raise e

上面这个方式中,如果异常没有被第一个except语句块处理,那么它也许被下一个语句块处理,或者根本不会被处理。

现在,最后一种方式会捕获所有异常:

try:
    file = open('test.txt', 'rb')
except Exception:
    # 打印一些异常日志,如果你想要的话
    raise

当你不知道你的程序会抛出什么样的异常时,上面的方式可能非常有帮助。

finally从句

我们把我们的主程序代码包裹进了try从句。然后我们把一些代码包裹进一个except从句,它会在try从句中的代码触发异常时执行。

在下面的例子中,我们还会使用第三个从句,那就是finally从句。包裹到finally从句中的代码不管异常是否触发都将会被执行。这可以被用来在脚本执行之后做清理工作。这里是个简单的例子:

try:
    file = open('test.txt', 'rb')
except IOError as e:
    print('An IOError occurred. {}'.format(e.args[-1]))
finally:
    print("This would be printed whether or not an exception occurred!")

# Output: An IOError occurred. No such file or directory
# This would be printed whether or not an exception occurred!

try/else从句

我们常常想在没有触发异常的时候执行一些代码。这可以很轻松地通过一个else从句来达到。

有人也许问了:如果你只是想让一些代码在没有触发异常的情况下执行,为啥你不直接把代码放在try里面呢?
回答是,那样的话这段代码中的任意异常都还是会被try捕获,而你并不一定想要那样。

大多数人并不使用else从句,而且坦率地讲我自己也没有大范围使用。这里是个例子:

try:
    print('I am sure no exception is going to occur!')
except Exception:
    print('exception')
else:
    # 这里的代码只会在try语句里没有触发异常时运行,
    # 但是这里的异常将 *不会* 被捕获
    print('This would only run if no exception occurs. And an error here '
          'would NOT be caught.')
finally:
    print('This would be printed in every case.')

# Output: I am sure no exception is going to occur!
# This would only run if no exception occurs.
# This would be printed in every case.

else从句只会在没有异常的情况下执行,而且它会在finally语句之前执行。

标签:python,从句,except,try,处理,print,IOError,异常
From: https://www.cnblogs.com/zuochuang/p/17149364.html

相关文章

  • pdf2docx:可将 PDF 转换成 docx 文件的 Python 库
    pdf2docx:https://github.com/dothinking/pdf2docx 可将PDF转换成docx文件的Python库。frompdf2docximportparsepdf_file='/path/to/sample.pdf'docx_fi......
  • python各种推导式(comprehensions)
    各种推导式(comprehensions)推导式(又称解析式)是Python的一种独有特性,如果我被迫离开了它,我会非常想念。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。共......
  • 简单友好的 Python 任务调度库
    schedule:https://github.com/dbader/schedule该项目人性化的API设计,让开发者仅用几行代码就能轻松实现定时任务。它不依赖任何第三方库,全部代码也就一个文件800多......
  • 计算机操作系统-- 中断和异常,系统调用
      用户态和核心态的不断切换                ......
  • python | 使用PIL压缩图片并使用字节流输出
    python|使用PIL压缩图片并使用字节流输出因为自己服务器上的博客流量比较小,所以加了这个用来压缩图片,不改变图片大小,将图像质量降低。直接丢代码了:importosfromio......
  • python基础知识100题-面试
    1、一行代码实现1--100之和#利用sum()函数求和#res=sum(range(1,101))#print(res)#50502、如何在一个函数内部修改全局变量#利用global修改全局变量'''a=......
  • 离线安装python第三方库
    有些公司,特别是一些大公司,对于网络安全这一块非常重视。上班用的电脑,系统都是公司标装系统,访问外网有很多限制,甚至只允许访问内网环境,不允许直接访问外网环境。这就导致我......
  • Java异常
    Java异常目录Java异常异常分类常见的异常运行时异常编译时异常异常抓抛异常处理try-catch-finallythrows自定义异常异常分类Exception是程序可以捕获并处理的异常,分为......
  • Python之通用装饰器的使用
    1.装饰带有参数的函数#添加输出日志的功能deflogging(fn):definner(num1,num2):print("--正在努力计算--")fn(num1,num2)returninner#使用......
  • python 操作 ES 一、基础操作
    示例代码环境python:3.8es:7.8.0环境安装pipinstallelasticsearch==7.8.0fromelasticsearchimportElasticsearch#1、创建ES对象,创建连接es=Elasticsearch(......