Error handling multiple entry boxes at one time - python

I am error handling the customer name, distance travelled, virus protection and wof and tune for my program. What would I put in plce of 'something' or instead of using and if and else statement to run the enter_job function when there are no errors, so when none of the code inside the if something part is relevant to the data entered?
Thank you!
if something:
if self.name_entry_var.get() == "":
self.name_entry_error.configure(text = "Enter customer name")
if self.wof_var.get() == " ":
self.wof_entry_error.configure(text = "Check YES or NO")
try:
if float(self.time_entry.get()) <= 0:
self.time_entry_error.configure(text = "Enter a positive number")
except ValueError:
self.time_entry_error.configure(text = "Enter a number")
try:
if float(self.distance_entry.get()) <= 0:
self.distance_entry_error.configure(text = "Enter a positive number")
except ValueError:
self.distance_entry_error.configure(text = "Enter a number")
else:
self.enter_job()
Edit:
If I do this then it will go straight into the enter_job function without checking the entries.
try:
self.enter_job()
except:
if self.name_entry_var.get() == "":
self.name_entry_error.configure(text = "Enter customer name")
if self.wof_var.get() == " ":
self.wof_entry_error.configure(text = "Check YES or NO")
try:
if float(self.time_entry.get()) <= 0:
self.time_entry_error.configure(text = "Enter a positive number")
except ValueError:
self.time_entry_error.configure(text = "Enter a number")
try:
if float(self.distance_entry.get()) <= 0:
self.distance_entry_error.configure(text = "Enter a positive number")
except ValueError:
self.distance_entry_error.configure(text = "Enter a number")

The error handling should be done within the enter_job() function.
something like so:
def enter_job():
if self.name_entry_var.get() == "":
self.name_entry_error.configure(text = "Enter customer name")
raise(self.name_entry_error)
if self.wof_var.get() == " ":
self.wof_entry_error.configure(text = "Check YES or NO")
raise(self.wof_entry_error)
try:
if float(self.time_entry.get()) <= 0:
self.time_entry_error.configure(text = "Enter a positive number")
raise(self.time_entry_error)
except ValueError:
self.time_entry_error.configure(text = "Enter a number")
raise(self.time_entry_error)
try:
if float(self.distance_entry.get()) <= 0:
self.distance_entry_error.configure(text = "Enter a positive number")
raise(self.distance_entry_error)
except ValueError:
self.distance_entry_error.configure(text = "Enter a number")
raise(self.distance_entry_error)
then running this line:
self.enter_job()
would return exceptions on it's own.
like so:
try:
self.enter_job()
except Exception as e:
raise(e)

Related

How to exit the program after max 3 attempts using Python, for exception program , if you dont get the desired output?

How to exit the program after max 3 attempts using Python, for exception program , if you dont get the desired output?
while True:
try:
x = int(input("Please enter a number: "))
break
#except Exception as e:
# print (e)
except ValueError:
print ("You have entered the non-numeric value. Enter the numerical value.")
except KeyboardInterrupt:
print ("\nYou have press Ctr+C.")
exit (1)
nothing = 0
while nothing < 3:
nothing += 1
try:
x = int(input("Please enter a number: "))
break
#except Exception as e:
# print (e)
except ValueError:
print ("You have entered the non-numeric value. Enter the numerical value.")
except KeyboardInterrupt:
print ("\nYou have press Ctr+C.")
break
Try:
c = 0
while c < 3:
c += 1
try:
x = int(input("Please enter a number: "))
break
except ValueError:
print ("You have entered the non-numeric value. Enter the numerical value.")
except KeyboardInterrupt:
print ("\nYou have press Ctr+C.")
break
You want exit after 3 attemps. Try this and count that input is wrong:
num_err = 0
while num_err < 3:
try:
x = int(input("Please enter a number: "))
except ValueError:
print ("You have entered the non-numeric value. Enter the numerical value.")
num_err += 1
except KeyboardInterrupt:
print ("\nYou have press Ctr+C.")
break
Use sys.exit() for stopping the whole script
import sys
while True:
try:
x = int(input("Please enter a number: "))
#except Exception as e:
# print (e)
except ValueError:
print ("You have entered the non-numeric value. Enter the numerical value.")
except KeyboardInterrupt:
print ("\nYou have press Ctr+C.")
sys.exit()
I read all the code that is submitted above but one thing is missing, that if a user
enter two incorrect value then enter a correct value after that he has only one chance. That is if user enter any wrong input after entering two correct input the loop will break.
So I have tried to solve this problem. Look at my code...
count = 0
while True:
try:
x = int(input("Please enter a number: "))
count = 0
break
except ValueError:
count += 1
print("You have entered the non-numeric value.Only three invalid inputs are allowed. Enter the numerical value.")
except KeyboardInterrupt:
print("\nYou have press Ctr+C.")
exit(1)
if count == 3:
break
I am trying to explain what I have written in this code.
As you have mentioned that a user can enter only three invalid input so I have increased the variable count each time when user will enter an invalid input. But if a user will enter a valid input then the count will be 0. It means again the user can enter maximum three invalid input. After entering three invalid input continuously the count will be 3 and the loop break

How to make a specific string work in a try-except block?

I don't want to make the user be able to enter anything other than numbers as the input for the "number" variable, except for the string "done".
Is it possible to somehow make an exception to the rules of the try-except block, and make the user be able to write "done" to break the while loop, while still keeping the current functionality? Or should I just try something different to make that work?
while number != "done":
try:
number = float(input("Enter a number: ")) #The user should be able to write "done" here as well
except ValueError:
print("not a number!")
continue
Separate the two parts : ask the user and verify if it is done, then parse it in a try/except
number = None
while True:
number = input("Enter a number: ")
if number == "done":
break
try:
number = float(number)
except ValueError:
print("not a number!")
continue
print("Nice number", number)
Instead of trying to make exceptions to the rules, you can instead do something like,
while True:
try:
number=input("Enter a number: ")
number=float(number)
except:
if number=="done":
break
else:
print("Not a number")
Check if the error message contains 'done':
while True:
try:
number = float(input("Enter a number: "))
except ValueError as e:
if "'done'" in str(e):
break
print("not a number!")
continue
also in this case continue is not necessary here (for this example at least) so it can be removed
Maybe convert the number to float afterwards. You can check if number is not equal to done,then convert the number to float
number = 0
while number != "done":
try:
number = input("Enter a number: ") #The user should be able to write "done" here as well
if number=="done":
continue
else:
number = float(number )
except ValueError:
print("not a number!")
continue
There are various ways to approach this situation.
First one that came across my mind is by doing:
while True:
user_input = input("Enter a number: ")
if user_input == "done":
break
else:
try:
number = float(user_input)
except ValueError:
print("not a number!")
continue
while True:
try:
user_input = input("Enter a number: ")
if user_input == "done":
break
number = float(user_input)
except ValueError:
print("not a number!")
continue
You can cast the input to float after checking if the input is 'done'

How to perform exception handling on this for loop

I would like to perform exception handling on the for statement at the bottom to perform similar exception handling as the function at the top. How would I go about implementing exception handling the for statement at the bottom? I would appreciate examples as I'm trying to learn to program. Regards:
def tested_values(user_input):
while True:
try:
user_input_int = int(input(user_input))
return user_input_int
except ValueError:
print("Please enter a number!")
def input_values(prompt="Please enter the number of stands you wish to enter the sales values for: "):
values = tested_values(prompt)
# user_input = int(input(prompt))
sales = []
for sales_values in range(1, values+1):
prompt = "Please enter the sales value for " + str(sales_values) + ": "
sales.append(int(input(prompt)))
print(sales)
input_values()
Similarly to how you did it above:
for sales_values in range(1, values+1):
while True:
try:
prompt = "Please enter the sales value for " + str(sales_values) + ": "
sales.append(int(input(prompt)))
break
except ValueError:
print("Please enter a number!")

Better way to ask user input in integer form in Python?

So I'm kind of very beginner to programming and just learning yet the basics. Now I would like to have my python program to ask the user to give a number and keep asking with a loop if string or something else is given instead.
So this is the best I came out with:
value = False
while value == False:
a = input("Give a number: ")
b = 0
c = b
try:
int(a)
except ValueError:
print("No way")
b += 1
if c == b:
value = True
So is there easier and better way to do this?
You can use this:
while True:
try:
a = int(input("Give a number: "))
break
except ValueError:
print("No way")
or this:
while True:
a = input("Give a number: ")
if a.isdigit():
break
print("No way")
while True:
try:
a = int(input("Give a number: "))
break
except ValueError:
print("No way")
continue
This will continue to prompt the user for an integer till they give one.
value = True
while value == True:
a = input("Give a number: ")
try:
int(a)
except ValueError:
print("No way")
continue
print("Yay a Number:", a)
value = False
Is this what you need?

How can my code only accept integers in Python?

My code distinguishes whether the input is valid or not. It's not supposed to accept zero or words. If the user plugs zero in, it works and says "anything but zero", "try again" BUT when it asks again, it accepts anything. What do I do to make it continue to ask until there is a valid input??
So far I got:
A = raw_input('Enter A: ')
try:
A = float(A)
if A == 0:
print "anything but zero"
A = raw_input("Try again")
except ValueError:
print "HEY! that is not a float!"
A = raw_input("Try again")
Please help! Thank you all!
You need to use a loop:
while True:
A = raw_input('Enter A:')
try:
A = float(A)
except ValueError:
print "enter a float!"
else:
if A == 0:
print "Enter not 0"
else:
break
The simplest approach is use a while loop and to move all the logic inside the try breaking if the cast is successful and not equal to 0:
while True:
try:
A = float(raw_input('Enter A: '))
if A != 0:
break
print "anything but zero"
except ValueError:
print "HEY! that is not a float!"
If you actually only want integers you should be casting to int not float.
Use a while loop:
valid = false
while not valid:
A = raw_input('Enter A: ')
try:
A = float(A)
if A == 0:
print "anything but zero"
A = raw_input("Try again")
else:
valid = true
except ValueError:
print "HEY! that is not a float!"
A = raw_input("Try again")
Hope this helps :)
while 1==1:
A = raw_input('Enter A: ')
try:
A = float(A)
if A == 0:
print "anything but zero"
A = raw_input("Try again")
else:
#valid input
break
except ValueError:
print "HEY! that is not a float!"

Categories