1. Limited time only! Sign up for a free 30min personal tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Exceptions handling in Python

  1. Oct 11, 2011 #1
    Code (Text):
     
    Hello, dear PFers. I'm currently beginning to learn Python and I got stuck at one exercise.
    1. The problem statement, all variables and given/known data
    Basically, I'm supposed to create a simple program that will calculate the position of an object according to the formula y(t) = v0*t - 0.5*g*t**2. Parameters v0 and t are supposed to be read from the command line and if one of them, or both are not given, the program should ask for them via an exception.


    2. Relevant equations

    3. The attempt at a solution
    ----------------------------------------------------------------
    Code (Text):
    import getopt, sys
    g = 9.81
    options, args = getopt.getopt(sys.argv[1:], '',['v0=', 't='])
    try:
        for option, value in options:
            if option == '--t':
                t = float(value)
            elif option == '--v0':
                v0 = float(value)
     
    except:
        if '--t' not in options:
            t = raw_input('t= ?')
            t = float(t)
        elif '--v0' not in options:
            v0 = raw_input('v0= ?')
            v0 = float(v0)
           
    y = v0*t - 0.5*g*t**2
    print 'y=', y, 'm'    
    ----------------------------------------------------------------

    It apparently works if I provide a valid input on a command line, but if I omit one of the parameters, the program is terminated with NameError: name 'v0' is not defined (for example). It completely ignores my except block. I'm new to this so it may be a bit silly, but I'm thankful in advance for any help.
     
    Last edited: Oct 11, 2011
  2. jcsd
  3. Oct 11, 2011 #2

    Mark44

    Staff: Mentor

    The best I can do is point you to some documentation on python exceptions - http://docs.python.org/tutorial/errors.html.

    I'm not at all familiar with python and how it handles exceptions, but I believe your code needs to raise an exception, probably a custom exception that you design. See sections 8.4 and 8.5 at the above link.

    Hope that helps.
     
  4. Oct 12, 2011 #3

    NascentOxygen

    User Avatar

    Staff: Mentor

    When you say
    do you mean when you invoke the code as, for example, prog --t --v 3
    where you have forgotten to supply the value for the t parameter?
    Or do you mean, for example, prog --v 3 where you have forgotten the --t 10 pair?

    Are you building your program to accommodate both mistakes? As written, it doesn't.
     
    Last edited: Oct 12, 2011
  5. Oct 12, 2011 #4
    Yes, I'm aware of that. Writing prog --t --v 3 would result in a GetoptError, but I do not need to accommodate this mistake into the program. For now I'm concerned about prog --v 3 or prog --t 3 or only prog cases
     
  6. Oct 12, 2011 #5

    NascentOxygen

    User Avatar

    Staff: Mentor

    Hi rawen. You are imagining an error condition where python will see none. Although python is powerful, it can't yet read minds. :smile:

    Code (Text):
         for option, value in options:
            if option == '--t':
                t = float(value)
            elif option == '--v0':
                v0 = float(value)
    This statement will execute properly whether or not --t and --v0 are present. An if statement is not in error just because no match was found. So, python is content to execute this statement and has no reason to execute your except: block.

    If you are determined to use the try: except: approach then you could experiment with deliberately creating an error condition, e.g.,

    Code (Text):
            if option == '--t':
                t = float(value)
            elif option == '--v0':
                v0 = float(value)
            else v0 = 0/0
    I don't have python at hand to try this out, but it won't like dividing by zero. To give this a more polished appearance, I reckon if you look you'll probably find python has a built-in statement to raise an exception (I haven't used python for a while) and force a jump into your except: code.

    In a short program it may be tidier to do away with the except: statement and incorporate its block of code into your if statement as a further else block, though it seems the specification for your assignment wants you to employ python's except: technique.
     
    Last edited: Oct 12, 2011
  7. Oct 13, 2011 #6
    Hello, thanks for all the help guys. I've managed to get the program working.
    I now see what I did wrong. Your post was especially helpful, Nascent.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: Exceptions handling in Python
  1. Python syntax (Replies: 5)

  2. Python Beginner (Replies: 3)

  3. Python question (Replies: 1)

Loading...