Monday, September 2, 2019

python - How do I check if a string is a number (float)?



What is the best possible way to check if a string can be represented as a number in Python?




The function I currently have right now is:



def is_number(s):
try:
float(s)
return True
except ValueError:
return False



Which, not only is ugly and slow, seems clunky. However I haven't found a better method because calling float in the main function is even worse.


Answer




Which, not only is ugly and slow




I'd dispute both.



A regex or other string parsing method would be uglier and slower.




I'm not sure that anything much could be faster than the above. It calls the function and returns. Try/Catch doesn't introduce much overhead because the most common exception is caught without an extensive search of stack frames.



The issue is that any numeric conversion function has two kinds of results




  • A number, if the number is valid

  • A status code (e.g., via errno) or exception to show that no valid number could be parsed.



C (as an example) hacks around this a number of ways. Python lays it out clearly and explicitly.




I think your code for doing this is perfect.


No comments:

Post a Comment

hard drive - Leaving bad sectors in unformatted partition?

Laptop was acting really weird, and copy and seek times were really slow, so I decided to scan the hard drive surface. I have a couple hundr...