Python How can I properly handle exceptions in my Python program?

  • Thread starter Thread starter rawen
  • Start date Start date
  • Tags Tags
    Python
AI Thread Summary
The discussion revolves around a Python programming exercise focused on calculating the position of an object using the formula y(t) = v0*t - 0.5*g*t**2. The user encountered a NameError when omitting command line parameters v0 or t, despite having implemented an exception handling block. The issue was identified as stemming from the way the try-except structure was set up, as the except block was not triggered due to the absence of an error in the if statements. Suggestions included creating a custom exception or deliberately causing an error to invoke the except block. Ultimately, the user resolved the issue and successfully got the program working, acknowledging the helpful guidance from other participants in the discussion.
rawen
Messages
6
Reaction score
0
Code:
Hello, dear PFers. I'm currently beginning to learn Python and I got stuck at one exercise.

Homework Statement


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.


Homework Equations



The Attempt at a Solution


----------------------------------------------------------------
Code:
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:
Technology news on Phys.org
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.
 
When you say
if I omit one of the parameters,
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:
NascentOxygen said:
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.

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
 
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:
     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:
        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:
Hello, thanks for all the help guys. I've managed to get the program working.
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.
I now see what I did wrong. Your post was especially helpful, Nascent.
 
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.
Thread 'Project Documentation'
Trying to package up a small bank account manager project that I have been tempering on for a while. One that is certainly worth something to me. Although I have created methods to whip up quick documents with all fields and properties. I would like something better to reference in order to express the mechanical functions. It is unclear to me about any standardized format for code documentation that exists. I have tried object orientated diagrams with shapes to try and express the...

Similar threads

Back
Top