Hi Mark,

On 10 December 2011 17:54, Mark Lybrand <mlybr...@gmail.com> wrote:
>
> I am working on the Files chapter of Dive into Python 3, and have implemented 
> the example script at the end of this message.  The first input prints to the 
> terminal as expected, the second value prints to the file as expected.  Then 
> the script tries to destroy in the class instance and bombs with:
>
> TypeError: __exit__() takes exactly 1 positional argument (4 given)
> Exception ValueError: 'I/O operation on closed file.' in <_io.TextIOWrapper 
> name
> ='out.log' mode='w' encoding='utf-8'> ignored
>
> and the final input is, naturally, never printed.
>
> Is the example wrong, or is this something to do with how Windows handles 
> stdout that is causing this not to work as designed?  I am using Python 3.2 
> on Windows Vista Home Premium.


It seems the example may be wrong -- the __exit__ method, as stated by
the error, is being given 4 parameters whereas the one defined in the
code only expects one.  I've looked an this is correct on Python 3.2
that I have on Windows as well.   Perhaps the implementation of
__exit__ has been changed somewhere and had the paramters added and
the book is just out of date?  In any case, changing the def __exit__
line to:

def __exit__(self, type, value, traceback):

... will fix the problem.

Cheers

Walter
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to