1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

python上下面管理工具适用场景及错误处理

前言

作为本际云服务器推荐网的小编小本本,今天为大家介绍一下Python中的前后文管理工具的适用场景及错误处理实例。通过这些内容的学习,希望能够让大家更好地应用前后文管理工具,提高编码复用性,同时也可以让大家多多涨薪。

python上下面管理工具适用场景及错误处理

最典型的例子:with句子

先看一个最典型的例子,使用with句子实现前后文进行文件写入操作。

f = open('123.txt', 'w')
f.write('python')
f.close()

with open('123.txt', 'w') as f:
    f.write('python')

前后文管理工具是什么?

前后文是context的直接翻译,它用于在系统中表明编码实施过程中所处前后左右自然环境。例如,在文件操作时,文档必须打开关闭,而文档读写操作就处在文件操作的前后文环境里。

前后文管理工具指的是,在执行某个命令之前实行某些预备处理工作,在执行完命令之后再执行一些清洁工作。其中,进入环境的函数被称为enter(),而退出环境的函数则被称为exit()。

前后文管理工具的应用领域

在资源优化配置作用方面,如文件整理、数据连接、数据库服务器等行为时需要关闭网络资源。此外,还可以在执行命令前后左右提升作用,例如编码之前做过权限验证等。

例如,下面这个数据库连接的上下文管理器类,每次连接数据库时,只要简单的调用with语句即可,不需要关心数据库的关闭、异常等。

import pymysql

class DBConnection(object):
    def __init__(self, ip, user, passwd, db):
        self.ip = ip
        self.user = user
        self.passwd = passwd
        self.db = db
    def __enter__(self):
        self.conn = pymysql.connect(self.ip, user = self.user, passwd = self.passwd, db = self.db)
        self.cur = conn.cursor()
        return self.cur
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.cur.close()
        self.conn.close()

with DBConnection('192.168.121.xxx', user = "xxx", passwd = "123456", db = "xxx") as cur:
    cur.execute("select * from student;")
    result = cur.fetchall()
    print(result)

此外,with语句不仅可以简化资源操作的后续清除操作,还可以代替try/finally进行异常处理。

下面这个上下文管理器类实现了异常处理,当with中的语句发生异常时,异常信息会被发送到exit()方法的参数中,并通过exit()方法进行处理。

class MyOpen(object):
    def __init__(self, file, mode):
        self._file = file
        self._mode = mode
    def __enter__(self):
        self._handle = open(self._file, self._mode)
        return self._handle
    def __exit__(self, exc_type, exc_val, exc_tb):
        self._handle.close()
        print('异常已被处理')
        return True

with MyOpen('123.txt', 'r') as f:
    f.write('python')

# 输出:
# 异常已被处理

结论

通过本文的介绍,我们详细说明了Python中前后文管理工具的适用场景及错误处理实例。希望本文对您有所帮助,并且能够在以后的编码实践中更好地运用前后文管理工具。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6628.html