amazing scope?

andrea crotti andrea.crotti.0 at gmail.com
Fri Nov 30 06:20:15 EST 2012


2012/11/30 andrea crotti <andrea.crotti.0 at gmail.com>:
> I wrote a script, refactored it and then introducing a bug as below:
>
> def record_things():
>     out.write("Hello world")
>
> if __name__ == '__main__':
>     with open('output', 'w') as out:
>         record_things()
>
>
> but the shocking thing is that it didn't actually stopped working, it
> still works perfectly!
>
> What my explanation might be is that the "out" is declared at module
> level somehow,
> but that's not really intuitive and looks wrong, and works both on
> Python 2.7 and 3.2..


Already changing it to:

def record_things():
    out.write("Hello world")

def main():
    with open('output', 'w') as out:
        record_things()

if __name__ == '__main__':
    main()

makes it stops working as expected, so it's really just a corner case
of using the if __name__ == '__main__'
which I had never encountered before..



More information about the Python-list mailing list