Question about using "with"

Peter Otten __peter__ at web.de
Tue Jan 9 13:42:05 EST 2007


Steven W. Orr wrote:

>>From the tutorial, they said that the following construct will
> automatically close a previously open file descriptor:
> 
> -------------------
> #! /usr/bin/python
> import sys
> 
> for nn in range ( 1, len(sys.argv ) ):
>      print "arg ", nn, "value = ", sys.argv[nn]
>      with open(sys.argv[nn]) as f:
>          for line in f:
>              print line,
> ------------------
> 
> but when I run it (with args) I get:
> 
> 591 > ./cat.py cat.py
>    File "./cat.py", line 6
>      with open(sys.argv[nn]) as f:
>              ^
> SyntaxError: invalid syntax
> 592 >
> 
> This example came from http://docs.python.org/tut/node10.html down in
> section 8.7
> 
> Am I missing something?

The with-statement only works in Python 2.5, and you have to enable it
explicitly:

>>> from __future__ import with_statement
>>> with open("tmp.txt") as f:
...     print len(f.read())
...
15
>>> f.read()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file

Peter



More information about the Python-list mailing list