首页/ 学科题库/ python/ 上下文管理器专项测试
python 模拟试卷

上下文管理器专项测试

20 题 40 分钟 难度:★★
  • with语句:基本用法、资源管理、异常处理
  • enter__和__exit:上下文管理器协议、返回值处理
  • contextlib模块:contextmanager装饰器、closing函数
  • 嵌套上下文:多个上下文管理器、退出顺序

试卷习题(20 题)

参考答案在文末
判断题
1
判断题

contextlib.contextmanager 装饰器可以将一个包含 yield 的普通函数转换为上下文管理器,yield 之前的代码等价于 __enter__ 方法,yield 之后的代码等价于 __exit__ 方法。

A

对

B

错

2
判断题

Python支持嵌套使用with语句,可以同时管理多个资源,多个with语句可以写在同一行。

A

对

B

错

3
判断题

with语句用于简化资源管理,确保资源在使用后自动释放,即使发生异常也能正确清理。

A

对

B

错

4
判断题

__exit__方法返回True可以抑制异常,使异常不再传播;返回False则异常会继续抛出。

A

对

B

错

5
判断题

实现上下文管理器协议需要定义__enter__和__exit__两个方法,这是Python上下文管理器的核心协议。

A

对

B

错

单选题
6
单选题

以下哪种情况__exit__方法不会被调用?

A

with块正常执行完毕

B

with块内发生异常

C

with块内使用return语句返回

D

程序在__enter__执行前崩溃

7
单选题

with语句块内发生异常时,以下哪项正确?

A

异常被忽略,继续执行

B

__exit__方法被调用后异常被重新抛出

C

__exit__方法不会被调用

D

程序直接终止,不调用任何方法

8
单选题

__exit__(self, exc_type, exc_val, exc_tb)中的三个参数,当with块内没有异常时:

A

都是None

B

分别是异常类型、值、追踪信息

C

只有exc_type是None

D

参数为空

9
单选题

__enter__方法的返回值会赋给with语句中的哪个变量?

A

with语句中的对象实例

B

as关键字后的变量

C

__exit__方法的参数

D

不返回任何值

10
单选题

使用@contextmanager装饰器创建上下文管理器时,yield语句的作用是:

A

定义__exit__方法

B

返回值给as变量,分割__enter__和__exit__代码

C

终止上下文管理器

D

抑制异常

11
单选题

嵌套上下文管理器的退出顺序是:

A

先进入先退出(FIFO)

B

先进入后退出(LIFO)

C

随机顺序

D

按字母顺序

12
单选题

contextlib模块的suppress装饰器/函数的作用是:

A

输出异常信息

B

抑制指定的异常类型,不让异常传播

C

创建上下文管理器

D

重定向输出

13
单选题

contextlib.ExitStack的主要用途是:

A

抑制异常

B

动态管理数量不定的多个上下文管理器

C

简化单个上下文管理器的创建

D

重定向输出

14
单选题

以下代码执行后会发生什么?

Python
class Handler:
    def __enter__(self):
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        if exc_type:
            print(f'异常: {exc_type.__name__}')
            return exc_type == ValueError
        return False

with Handler():
    raise ValueError('test')
print('继续执行')
A

输出"异常: ValueError"和"继续执行"

B

输出"异常: ValueError",然后程序终止

C

ValueError异常被抛出

D

输出"继续执行"(无异常信息)

15
单选题

with语句的执行流程是:

A

执行代码块 → 调用__enter__ → 调用__exit__

B

调用__enter__ → 执行代码块 → 调用__exit__

C

调用__exit__ → 执行代码块 → 调用__enter__

D

执行代码块 → 调用__exit__ → 调用__enter__

填空题
16
填空题

with语句进入代码块前调用方法,退出代码块后调用方法。as关键字后的变量是方法的返回值。with语句确保资源在异常发生时也能正确释放。

17
填空题

__exit__方法接收三个异常参数:(异常类型)、(异常值)、(异常追踪)。无异常时三者都是None。返回True可抑制异常,返回False则异常继续抛出。

18
填空题

上下文管理器协议要求实现和两个方法。__enter__方法在进入with块时调用,其赋给as后的变量。__exit__方法在退出with块时调用,接收三个异常参数,返回True可以抑制异常。

19
填空题

多个with语句可以在同一行使用分隔,Python 3.10+支持用包裹。使用ExitStack可以动态管理的上下文管理器,通过enter_context方法添加新的上下文,退出时按后进先出顺序调用各__exit__。

20
填空题

使用@contextmanager装饰器时,之前的代码相当于方法,的值赋给as后的变量,yield之后在finally块中的代码相当于__exit__方法。

参考答案
1.正确 2.正确 3.正确 4.正确 5.正确 6.D 7.B 8.A 9.B 10.B 11.B 12.B 13.B 14.A 15.B 16.__enter__;__exit__;__enter__ 17.exc_type;exc_val;exc_tb 18.__enter__;__exit__;返回值 19.逗号;括号;数量不定 20.yield;__enter__;yield
想在手机上在线作答这套卷子?
使用微信 卷王开发者小程序/App,首页顶部扫一扫识别二维码,即可限时作答并自动判分。
了解产品 App
← 上一套 Python高级技能认证 下一套 → 元编程专项测试