文章目录

  • try 和 else
  • try & except &finally
  • with as


try 和 else

try:
    int('abc') #int ('123')是没错的
except ValueError as reason:
    print('出错啦:'+str(reason))
else:
    print('没有任何异常!')

with后面接的对象返回的结果赋值给f。此例当中open函数返回的文件对象赋值给了f.with会自已获取上下文件的异常信息。
with是如何做到的呢?
with后面返回的对象要求必须两__enter__()/exit()这两个方法,而文件对象f刚好是有这两个方法的,故应用自如。
原文链接:

try & except &finally

try:
    检测范围
except Exception[as reason]:
    出现异常(Exception)后的处理代码
finally:
    无论如何都会被执行的代码
try:
    with open('data.txt','w') as f:
        for each_line in f:
            print(each_line)
except OSError as reason:
    print('出错啦:'+str(reason))
finally:
    f.close()
'''
try:
    检测范围
except Exception[as reason]:
    出现异常(Exception)后的处理代码


'''
'''
可以直接:

try:
    检测范围
except :
    print('出错啦')

但不推荐这样做
'''



try:
    sum=1+'1'
    f=open('why am i a file')
    print(f.read())
    f.close()
except OSError as reason:
    print('the reason why file is error:'+str(reason))
except TypeError as reason:
    print('the reason for error:'+str(reason))

'''
中间那个错误处理会被屏蔽掉,可这样:
except(OSError,TypeError):
    print('出错啦')
'''

# 直接raise引发一个异常
```python
raise ZeroDivisionError('除数为零的异常')

with as

任何一门编程语言中,文件的输入输出、 数据库的连接断开等,都是很常见的资源管理操作。 但资源都是有限的,在写程序时,必须保证这些资源在使用过后得到释放, 不然就容易造成资源泄露,轻者使得系统处理缓慢,严重时会使系统崩溃。

例如,前面在介绍文件操作时, 一直强调打开的文件最后一定要关闭, 否则会程序的运行造成意想不到的隐患。 但是,即便使用 close() 做好了关闭文件的操作, 如果在打开文件或文件操作过程中抛出了异常,还是无法及时关闭文件。

为了更好地避免此类问题,不同的编程语言都引入了不同的机制。 在 Python 中,对应的解决方式是使用 with as 语句操作上下文管理器(context manager), 它能够帮助我们自动分配并且释放资源。 简单的理解,同时包含 enter() 和 exit() 方法的对象就是上下文管理器。 常见构建上下文管理器的方式有 2 种, 分别是基于类实现和基于生成器实现, 在《什么是上下文管理器,深入底层了解 with as 语句》一文有详细介绍。 例如,使用 with as 操作已经打开的文件对象(本身就是上下文管理器), 无论期间是否抛出异常,都能保证 with as 语句执行完毕后自动关闭已经打开的文件。

首先学习如何使用 with as 语句。with as 语句的基本语法格式为:

with 表达式 [as target]:
    代码块
  • 此格式中,用 [] 括起来的部分可以使用,也可以省略。
  • 其中,target 参数用于指定一个变量,该语句会将 expression 指定的结果保存到该变量中。
  • with as 语句中的代码块如果不想执行任何语句,可以直接使用 pass 语句代替。