当前位置: 首页 > article >正文

[python学习笔记]--异常、with、assert

try/except

try/except...else

try-finally 

raise 抛出异常 

assert(断言)

Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。

import sys
assert ('linux' in sys.platform), "该代码只能在 Linux 下执行"

with关键字

with open('./test_runoob.txt', 'w') as file:
    file.write('hello world !')

使用 with 关键字系统会自动调用 f.close() 方法, with 的作用等效于 try/finally 语句是一样的。

with 语句实现原理建立在上下文管理器之上。

上下文管理器是一个实现 __enter__ 和 __exit__ 方法的类。

使用 with 语句确保在嵌套块的末尾调用 __exit__ 方法。

(1)紧跟with后面的语句被求值后,返回对象的“–enter–()”方法被调用,这个方法的返回值将被赋值给as后面的变量;
(2)当with后面的代码块全部被执行完之后,将调用前面返回对象的“–exit–()”方法。

class Sample:
    def __enter__(self):
        print "in __enter__"
        return "Foo"
    def __exit__(self, exc_type, exc_val, exc_tb):
        print "in __exit__"
def get_sample():
    return Sample()
with get_sample() as sample:
    print "Sample: ", sample

#in __enter__
#Sample:  Foo
#in __exit__

可以看到,整个运行过程如下:
(1)enter()方法被执行;
(2)enter()方法的返回值,在这个例子中是”Foo”,赋值给变量sample;
(3)执行代码块,打印sample变量的值为”Foo”;
(4)exit()方法被调用;

【注:】exit()方法中有3个参数, exc_type, exc_val, exc_tb,这些参数在异常处理中相当有用。
exc_type: 错误的类型
exc_val: 错误类型对应的值
exc_tb: 代码中错误发生的位置

class Sample():
    def __enter__(self):
        print('in enter')
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        print "type: ", exc_type
        print "val: ", exc_val
        print "tb: ", exc_tb
    def do_something(self):
        bar = 1 / 0
        return bar + 10
with Sample() as sample:
    sample.do_something()


http://www.kler.cn/a/454681.html

相关文章:

  • CTF-RE: 安卓逆向 + 加密算法分析爆破 [第一届国城杯 round] 赛后学习
  • Go主协程如何等其余协程完再操作
  • 1-Linux 基础入门指南
  • 低成本Type - C单口便携屏的全方位解析
  • 解决PDF.js部署到IIS服务器上后报错mjs,.ftl 404 (Not Found)
  • 1.微服务灰度发布(方案设计)
  • 接口Mock技术介绍
  • Exchange ProxyShell 攻击链利用详解
  • 虚拟化 | Proxmox VE 8.x 开源的虚拟化平台快速上手指南
  • 惯性动捕套装与虚拟人应用 | 激活3D虚拟人互动性与表现力
  • Day56 图论part06
  • .net core 的多线程编程
  • stm32f103zet6 i2c 四针 oled 标准库开发
  • 机试题——圣诞节礼盒
  • python监控数据处理应用服务Socket心跳解决方案
  • 树莓集团:解读资源整合是什么意思?
  • C语言基础学习记录-文件管理
  • RabbitMQ工作模式(详解 工作模式:简单队列、工作队列、公平分发以及消息应答和消息持久化)
  • Zettlr(科研笔记) v3.4.1 中文版
  • 在Nginx部署Web应用,如何保障后端API的安全
  • 找到字符串中所有字母异位词
  • 云原生大数据计算服务 MaxCompute
  • IPv6的报头
  • 全视通智慧机构养老方案,含有紧急呼叫、安全保障等系统
  • Lua元方法
  • element-ui表格多级表头固定列和合并单元格