On 9 February 2014 13:28, Russel Winder <[email protected]> wrote:
> On Mon, 2014-01-20 at 10:41 +0000, Oscar Benjamin wrote:
> [...]
>> f = open('myfile.txt')
>> for line in f:
>> print(line.upper())
>> f.close()
>
> I suggest we even see this as not good code due to the possibility of
> I/O exceptions:
>
> with open('myfile.txt') as f:
> for line in f:
> print(line.upper())
>
> should, I argue, be the canonical idiom in modern Python.
I agree entirely, but what you've overlooked is that my examples are
carefully targeted at a particular part of a tutorial-based class.
We're talking about iteration so this is quite early in the course. At
this stage I want my students to understand that closing a file is an
explicit action that needs to occur. Later in the course I will teach
exception handling and explain that the above should be rewritten as
f = open('myfile.txt')
try:
for line in f:
print(line.upper())
finally:
f.close()
Shortly after that we will look at using (but not creating) context
managers and I'll explain that file objects are also context managers.
Oscar
_______________________________________________
Tutor maillist - [email protected]
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor