On 09Aug2019 20:53, Paul St George <em...@paulstgeorge.com> wrote:
I almost understand.
Are you saying I should change the first line of code to something like:

|outstream = with open(path to my file,'w') # this is invalid syntax|

and then delete the
outstream.close()

No, you should do what Peter wrote:

with open("/path/to/file", "w") as outstream:
  print(my_stuff, file=outstream)

Got it! I hadn't taken Peter's advice as code. I thought (well anyway now I 
have it). So thanks to Peter, Cameron and
Rhodri.

No worries. You should also got and look up "context manager" in the Python docs.

It is a general mechanism where you can write:

 with something as name:
   suite of code

where "something" is an object which implements a context manager. Before "suite of code" starts Python calls "something.__enter__" and when the interpreter leaves the suite Python calls "something.__exit__".

Notably, it will call __exit__ no matter how you leave the suite: as usual, by falling off the end, or early with an exception or a break or a continue or a return. The __exit__ function always gets called.

In the case Peter's example, "something" is "open()": the file object you get back from open() implements a context manager. Its __enter__ function does nothing, but its __exit__ function closes the file. Reliably and immediately.

Cheers, Cameron Simpson <c...@cskk.id.au> (formerly c...@zip.com.au)

I swear to god, officer, I'm fixing this bridge. Just go divert traffic.
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to