Am 12.12.2016 um 17:29 schrieb Bryon Adams:
Is there a way to force my argument to always be a string before
entering the function? Else, is there a better way to go about this? In
whatever program I write, I could change what I want as input to be a
string prior to tossing it into the function but I think it would make
more sense for my function to already do it. The function otherwise
works. This is on Python3.5 under Fedora 25
The only other thing I could think of would be to put exceptions in for
syntax error and whatever else pops up as I go along, though to be
honest it *should* always be a string that gets dumped into the
function. Not sure how I'd put the exception together though since it's
not making it into the function prior to failing.
Syntax errors don't raise exceptions, because the program doesn't start
at all as long as it contains them. Exceptions are raised at runtime.
-------------------------------------------
Error from interpreter: (looks like it's taking issue with it being a
number it doesn't know how to deal with)
ip_checker(169.254.0.1)
File "<stdin>", line 1
ip_checker(169.254.0.1)
^
SyntaxError: invalid syntax
You are calling the function with an invalid literal: a number can't
contain more than one decimal point and a string literal needs quotes
around it.
If the argument is valid but is no string (a number, a list or anything
else) trying to split it raises an AttributeError:
>>> s = 123.456
>>> s.split('.')
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
s.split('.')
AttributeError: 'float' object has no attribute 'split'
>>> ['a', 'b', 'c'].split('.')
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
['a', 'b', 'c'].split('.')
AttributeError: 'list' object has no attribute 'split'
So you could use a second except clause:
try:
ip_addr = ...
except ValueError:
...
except AttributeError:
print("Argument must be a string, please try again.")
return False
-------------------------------------------
My function:
def ip_checker(ip_address):
'''
Takes one IP address and checks whether it is valid or not.
'''
# Try to convert to integers
try:
ip_addr = [int(i) for i in ip_address.split('.')]
except ValueError:
print('Invalid characters were entered or an octet is empty, please
try again.')
return False
...
HTH
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor