在Python中使用WITH语句

Using with statement in python

本问题已经有最佳答案,请猛点这里访问。

嘿,伙计们正试图在我的代码中使用with语句..因为我对python不熟悉,所以我刚写了代码来理解with语句的工作..我的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Employee:
    empCount = 0
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary


c = Employee("blah",1)
c.empCount = ['aad']




class Subin(Employee):

    def __init__(self, name, salary):
        self.name = name
        self.salary = salary


    def __enter__(self):
        return self

    def __exit__(self ,type):
        print 'ok'


    def babe(self):
        with c.empCount as b:
            return 0

b = Subin("sds",1)
b.babe()

当我运行代码时,我得到错误:

1
2
3
4
5
6
Traceback (most recent call last):
  File"C:/Python27/dfg", line 38, in <module>
    b.babe()
  File"C:/Python27/dfg", line 33, in babe
    with c.empCount as b:
AttributeError: __exit__

你们能告诉我为什么会这样吗?


首先,python代码不是"自由形式"。如果缩进不正确,它将不会编译或运行。将代码剪切并粘贴到解释器中会显示这一点。

其次,您错误地使用了with语句。不是Subin类应该充当上下文管理器(__enter____exit__方法,尽管后者的参数数目错误),而是c.empCount对象,它在这里是一个列表,因此不起作用。

在官方文件中描述了WITH语句,并提供了一些示例。

在尝试上下文管理器之前,我建议您多使用一些基本的Python。