How to check if a string "is" an int?

Dave Hansen iddw at hotmail.com
Wed Dec 21 16:35:43 CET 2005


On Thu, 22 Dec 2005 01:41:34 +1100 in comp.lang.python, Steven
D'Aprano <steve at REMOVETHIScyber.com.au> wrote:

[...]
>Well, let's find out, shall we?
[...]
>A small but consistent speed advantage to the try...except block.
>
>Having said all that, the speed difference are absolutely trivial, less
>than 0.1 microseconds per digit. Choosing one form or the other purely on
>the basis of speed is premature optimization.

Or maybe on which actually works.  LBYL will fail to recognize
negative numbers, e.g.

def LBYL(s):
    if s.isdigit():
        return int(s)
    else:
        return 0

def JDI(s):
    try:
        return int(s)
    except:
        return 0

test = '15'
print LBYL(test), JDI(test)   #-> 15 15

test = '-15'
print LBYL(test), JDI(test)   #-> 0 -15

>
>But the real advantage of the try...except form is that it generalises to
>more complex kinds of data where there is no fast C code to check whether

re: Generalization, apropos a different thread regarding the %
operator on strings.  In Python, I avoid using the specific type
format conversions (such as %d) in favor of the generic string
conversion (%s) unless I need specific field width and/or padding or
other formatting, e.g.

   for p in range(32):
	v = 1<<p
	print "%2u %#010x : %-d" % (p,v,v)

Regards,
                                        -=Dave

-- 
Change is inevitable, progress is not.



More information about the Python-list mailing list