I am trying to convert input() data to int() with the following code:
prompt_text = "Enter a number: "
try:
user_num = int(input(prompt_text))
except ValueError:
print("Error")
for i in range(1,10):
print(i, " times ", user_num, " is ", i*user_num)
even = ((user_num % 2) == 0)
if even:
print(user_num, " is even")
else:
print(user_num, " is odd")
I get the following odd error when I enter asd2 for example:
Enter a number: asd2 Error
Traceback (most recent call last): File "chapter3_ex1.py", line 8, in <module>
print(i, " times ", user_num, " is ", i*user_num)
NameError: name 'user_num' is not defined
What am I doing wrong?
The problem that you are facing is that the interpreter raises the error in the
try
and executes theexcept
block. After that it will start to execute everyline. This will throw theNameError
You can overcome that by putting the rest of the program into the
else
block.Quoting from the Python tutorial
Another way is to use a sentinel value
This will also work. However the results may not be as expected.
Protip - Use 4 spaces to indent
The problem isn't with the conversion to an
int
.user_num
doesn't get a value if an exception is thrown, but it's used later.You can fix this by putting the code that uses
user_num
in the try-block. I'll also add create a function to clean things up.See the ideone here.
This may not be the cleanest solution but it addresses the problem, in your code user_num is not initialized unless it is a number.