On 5/12/2015 3:49 PM, Ned Batchelder wrote:
On Tuesday, May 12, 2015 at 3:13:32 PM UTC-4, zljubi...@gmail.com wrote:
Hi, I have python file with the following structure:

import...

A = configparser.get(...)
B = configparser.get(...)

Command line parameters parsing [they can change variable A or B]

Def usage()
        Print how to use script parameters

def main():
        ...

if __name__ == "__main__":
     main()

If I find an error in command line parameters section I cannot call function 
usage() because it is not defined yet.

I have few options here:
1.      Put definition of usage function before command line parameters parsing 
section
2.      Make parameters global and put them in the main function
3.      ...maybe some other options...


I would put all of the code into a function some place.  Don't have
anything at the top level of the file except imports, function (and
class) definitions, and an "if __name__....." clause at the bottom.

I was about to suggest the same. One advantage of 'write tests first' is that you force yourself to write testable code from the beginning, instead of refactoring later.

If you need to use globals, assign them inside a parse_arguments
function that has a "global" statement in it.

Better not to have mutable module globals if you can avoid it. If you want application globals, put them in a separate module.

As a side note, if you are going to have code at the top-level of
the file, then there's no point in the "if __name__..." clause.
That clause is designed to make a file both runnable and importable.
But your top-level code makes the file very difficult to import.

And you need to import to test.

--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to