[IronPython] Newbie: convert string to python expression??

Michael Foord fuzzyman at voidspace.org.uk
Tue Dec 16 18:13:27 CET 2008


Kristian Jaksch wrote:
> Ok, did you mean something like below?:
> *
> clr.AddReference("Mapack, Version=1.0.0.0, Culture=neutral, 
> PublicKeyToken=null")
>
> from Mapack import **    * #A library that contain classes for working 
> with algebra etc.*
>
> *context = {}
>
> context['m'] = Matrix(5,5)    #creating a 5 rows, 5 columns matrix 
> object in context
>
> *

Looks good.
> *
> def inputBox_KeyDown(s, e):
>  key = e.Key.value__
>  result = root.inputBox.Text
>  if key == 3: #If 'Enter' key is pressed
>       try:
>           try:
>               root.message.Text = eval(result)
>           except SyntaxError:
>              exec result in context
>       except Exception, e:
>           print 'Unhandled exception', e
>       root.inputBox.Text = "" #Clearing inputBox*
>
> But this creates a fixed size matrix and I still get an exception if I 
> type for example *m=Matrix(2,2)* in the 'inputBox'. I want to make 
> this as general as possible. Can't I place everything that is imported 
> from 'Mapack' into the 'context' dictionary together with whatever the 
> user types in besides of that?

You can. I'll give you a clue - import * makes it harder. Try importing 
Mapack and then it will be easier to put things from the module into the 
dictionary.
> There are several more classes that must be placed in 'context'. It 
> would be nice to have the user type *n=m.Transpose()* or whatever 
> method he wants to get out from the 'Mapack' library and then let the 
> code be executed correctly.

Does that not work already - it should do.

Michael
>
> Thanks very much!
>
>
> 2008/12/16 Michael Foord <fuzzyman at voidspace.org.uk 
> <mailto:fuzzyman at voidspace.org.uk>>:
> > xkrja wrote:
> >>
> >> Thanks!
> >>
> >> I'm using Ironpython with Silverlight so I can't get access to
> >> Windows.Forms
> >>  
> >
> > Ah - in which case it probably lives in System.Windows.Input
> >>
> >> Please bear with me :-) New stuff's showing up all the time. The 
> solution
> >> you proposed worked but there must be something I don't get with the
> >> scope.
> >> Please look at my snippet below:
> >>
> >>  
> >
> > The advantage of a specific context is that you control what objects the
> > code has access to. Try setting the Matrix object into the 
> dictionary with
> > the key 'm' and your code should have access to it.
> >
> > Michael
> >
> >> import clr, sys
> >> clr.AddReference("Mapack, Version=1.0.0.0, Culture=neutral,
> >> PublicKeyToken=null")
> >> from Mapack import *
> >> .
> >> .
> >> .
> >>
> >> def inputBox_KeyDown(s, e):
> >>    key = e.Key.value__
> >>  result = root.inputBox.Text
> >>  if key == 3: #If 'Enter' key is pressed
> >>       try:
> >>           try:
> >>               root.message.Text = eval(result)
> >>           except SyntaxError:
> >>              exec result in context
> >>       except Exception, e:
> >>           print 'Unhandled exception', e
> >>       root.inputBox.Text = ""                         m = 
> Matrix(2,2)    
> >>             #NOTICE: If I hard code this
> >> definition in the function it works
> >>       print m                            #but if I try to type
> >> m=Matrix(2,2) in inputBox it says:
> >>                                            #"Matrix is not defined"
> >>
> >>
> >> I can create an object of the Matrix()-class if I code it straight into
> >> the
> >> function as shown in my snippet above but I can't type m=Matrix(2,2) in
> >> the
> >> 'inputBox' and then execute it. Then I get an exception: "Matrix is not
> >> defined".
> >> How can I work around this?
> >>
> >> Thanks very much!
> >>  
> >>
> >> Michael Foord-5 wrote:
> >>  
> >>>
> >>> Oh - and Windows Forms has a Keys enumeration so that you don't 
> have to
> >>> rely on the underlying value of the event key property.
> >>>
> >>> from System.Windows.Forms import Keys
> >>>
> >>> if e.Key == Keys.Enter:
> >>>
> >>> (or something like that - check out the MSDN documentation for the
> >>> enumeration.)
> >>>
> >>> Michael Foord
> >>>
> >>>
> >>>    
> >>
> >>  
> >
> >
> > --
> > http://www.ironpythoninaction.com/
> > http://www.voidspace.org.uk/blog
> >
> >
> > _______________________________________________
> > Users mailing list
> > Users at lists.ironpython.com <mailto:Users at lists.ironpython.com>
> > http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
> >
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Users mailing list
> Users at lists.ironpython.com
> http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
>   


-- 
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/blog





More information about the Ironpython-users mailing list