Question about using "with"

S

Steven W. Orr

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?

TIA

--
Time flies like the wind. Fruit flies like a banana. Stranger things have .0.
happened but none stranger than this. Does your driver's license say Organ ..0
Donor?Black holes are where God divided by zero. Listen to me! We are all- 000
individuals! What if this weren't a hypothetical question?
steveo at syslang.net
 
S

Steven Bethard

Steven said:
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?

You need to enable the with statement using a __future__ import::
<stdin>:1: Warning: 'with' will become a reserved keyword in Python 2.6
File "<stdin>", line 1
with open('temp.txt', 'w') as f:
^
SyntaxError: invalid syntax.... f.write('hello')
....

STeVe
 
P

Peter Otten

Steven said:
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:
.... print len(f.read())
....
15Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file

Peter
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,774
Messages
2,569,598
Members
45,149
Latest member
Vinay Kumar Nevatia0
Top