1
2
|
with expr1 as e1:
with expr2 as e2:
|
1
2
3
|
f
=
open
(
'test.txt'
,
'w'
)
f.write(
"hello"
)
f.close()
#这句很容易被忘记,这也是为什么推荐使用with
|
1
2
|
with
open
(
'test.txt'
,
'w'
) as f:
f.write(
"hello"
)
|
1
2
3
4
|
>>>f.__enter__
<built
-
in
method __enter__ of
file
object
at
0x029F0700
>
>>>f.__exit__
<built
-
in
method __exit__ of
file
object
at
0x029F0700
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class
OpenFile(
object
):
def
__init__(
self
,filename,mode):
self
.filename
=
filename
self
.mode
=
mode
def
__enter__(
self
):
self
.f
=
open
(
self
.filename,
self
.mode)
return
self
.f
#作为as说明符指定的变量的值
def
__exit__(
self
,exception_type,exception_value,traceback):
if
exception_type
is
None
:
#如果没有异常,正常关闭资源
self
.f.close()
else
:
#有异常发生
print
exception_value
print
traceback
return
False
#返回false则异常会被重新抛出
with OpenFile(
'my_file.txt'
,
'w'
) as f:
f.write(
'Hello'
)
f.write(
'World'
)
|