Is there a simple way to parse this string ?

Steven D'Aprano steven at REMOVE.THIS.cybersource.com.au
Fri Dec 21 02:08:46 EST 2007


On Thu, 20 Dec 2007 20:27:23 -0800, josepharmbruster at gmail.com wrote:

> Stef,
> 
> For clarification, there is nothing hazardous about using eval on the
> string that you presented.
> 
> t = eval('(0, 0, 0, 255), (192, 192, 192, 255), True, 8')
> 
> Whether or not this is the "simplest" solution, remains a question.


For clarification, if all the poster wanted was to convert the *specific* 
*known* string to a tuple, he would be better off just writing it as a 
tuple:

t = (0, 0, 0, 255), (192, 192, 192, 255), True, 8

is much faster than calling eval().

But obviously that's not what the Original Poster wants to do. The tuple 
give was indicative of input that comes from somewhere -- perhaps a 
config file, perhaps a web form, perhaps a command line argument, who 
knows? The point is, if the string comes from a user, then it could 
contain anything:

'(0, 0, 0, 255), (192, 192, 192, 255), True, 8'
'1000, 10001, 100002, 1000004'
'"foo bar baz".split()'
'[i for i in range(100000)]'
'[19852.7412]*100000**2'
'__import__("os").system("ls -r *")'


Just because the OP's specific example is safe doesn't make eval() safe.


-- 
Steven



More information about the Python-list mailing list