शंतनू wrote:

Using re module:

===
import re
strNum = raw_input("enter numbers, separated by space: ")
if re.search('[^\d ]', strNum):
    print('Invalid input')
else:
    data = [int(x) for x in strNum.split()]
    print(data)


This is not Perl, where everything is a nail that needs to be hammered with a regex. Especially not a regex which is wrong: your regex is too strict. It disallows using tabs as separators, while str.split() will happily consume tabs for you.

In general, in Python, the way to check of an error condition is to try it, and if it fails, catch the exception. This doesn't always apply, but it does apply most of the time.

data = [int(x) for x in strNum.split()]

will print a perfectly good error message if it hits invalid input. There's no need to check the input first with a regex. If you want to recover from errors, it is easy by taking the conversion out of a list comprehension and into an explicit for loop:

data = []
for s in strNum.split():
    try:
        data.append(int(s))
    except ValueError:
        data.append(42)  # Or some other default value.

If you don't care about recovering from individual errors, but only care whether the entire conversion succeeds or fails:

try:
    data = [int(s) for s in strNum.split()]
except ValueError:
    data = []



--
Steven
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to