[Tutor] Python as Teaching Language

Oscar Benjamin oscar.j.benjamin at gmail.com
Sun Feb 9 14:36:12 CET 2014


On 9 February 2014 13:28, Russel Winder <russel at winder.org.uk> 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


More information about the Tutor mailing list