The issue you're having is due to int
raising the same exception for all invalid strings, whether they represent floats or just random text. Here's one way you could solve that:
while True:
try:
s = input("Enter a number 1-4")
x = int(x) # this will raise a ValueError if s can't be made into an int
if 1 <= x <= 4:
break
print("The number must be between 1 and 4")
except ValueError:
try:
float(s) # will raise another ValueError if s can't be made into a float
print("You must enter an integer, rather than a floating point number.")
except ValueError:
print("You must enter a number.")