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.
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
What percentage of programmers have learned to touch type? Have you? Do you think it's important, not just for programming, but for more-than-casual computer users generally? ChatGPT didn't have much on it ("Research indicates that less than 20% of people can touch type fluently, with many relying on the hunt-and-peck method for typing ."). 'Hunt-and-peck method' made me smile. It added, "For programmers, touch typing is a valuable skill that can enhance speed, accuracy, and focus. While...
I had a Microsoft Technical interview this past Friday, the question I was asked was this : How do you find the middle value for a dataset that is too big to fit in RAM? I was not able to figure this out during the interview, but I have been look in this all weekend and I read something online that said it can be done at O(N) using something called the counting sort histogram algorithm ( I did not learn that in my advanced data structures and algorithms class). I have watched some youtube...

Similar threads

Back
Top