Sorry for late . Yeah , if everything is string then no problem , if there is no possibility then will use string instead .
Big thanks , hope you are doing well. 在 2019年5月3日星期五 UTC+8下午12:43:08,Justin Israel写道: > > > > On Fri, May 3, 2019 at 4:38 PM Zhen Huang <qeej...@gmail.com <javascript:>> > wrote: > >> Hi Justin , >> >> cPickle can deserialize pymel node , and like eval it can't convert back >> if the node not exists . >> >> Thank you , >> > > Likely because the pymel node constructor wants to validate and fail if it > doesn't exist, as opposed to letting you have a representation of a node > that may or may not exist. This is why I was suggesting just storing full > string paths and then converting each one back into a pymel node and being > able to handle some that do not exist. If you use strings then you can use > json. > > >> >> 在 2019年5月3日星期五 UTC+8上午3:40:51,Justin Israel写道: >>> >>> >>> >>> On Fri, May 3, 2019, 1:06 AM zhen huang <qee...@gmail.com> wrote: >>> >>>> Hi Justin , >>>> >>>> Thank you ! I've tried the json even can't dumps the pymel node data . >>>> This is why I looked for the eval solution . >>>> Please check the error out : >>>> Error: TypeError: file C:\Program >>>> Files\Autodesk\Maya2017\bin\python27.zip\json\encoder.py line 184: >>>> nt.Transform(u'pSphere2') is not JSON serializable >>>> >>>> Thanks and Regards , >>>> >>> >>> Convert the PyMel node into a fullpath string and store that. When you >>> deserialize it back to a dict, you can convert the full path back into a >>> PyMel node. >>> >>> Alternatively you may try using the cPickle module as it may be able >>> serialize PyMel nodes. Probably better that you just use the full path >>> though. >>> >>> >>>> 在 2019年5月2日星期四 UTC+8下午6:47:45,Justin Israel写道: >>>>> >>>>> >>>>> >>>>> On Thu, May 2, 2019, 9:24 PM Zhen Huang <qeej...@gmail.com> wrote: >>>>> >>>>>> Hi , >>>>>> >>>>>> I have a question about python build-in function 'eval ' , please >>>>>> check out the example code below : >>>>>> >>>>>> ## create a polySphere , default name : 'pSphere1' >>>>>> >>>>>> import pymel.core as pm >>>>>> from pymel.core import nt >>>>>> >>>>>> # initialize a pymel transform node >>>>>> pymelShpere = pm.PyNode('pSphere1') >>>>>> # put it to a dict >>>>>> testDict = {0:pymelShpere} >>>>>> # convert it to str which can be stored as string in file basic data >>>>>> strMark = str(testDict) >>>>>> >>>>>> # now read it back , if scene has the pShere1 , it will work >>>>>> perfectly >>>>>> newDict = eval(strMark) >>>>>> >>>>>> # now delete the pShpere1 , and try to convert data to dict , failed >>>>>> because the pymel nt will try to initialize the string 'pShere1' to >>>>>> pymel >>>>>> node >>>>>> newDict =eval(strMark) >>>>>> >>>>>> >>>>>> My question : if I have lots of nodes store in a string data which >>>>>> convert from dict , is there a way to just make it out , just ignore >>>>>> error >>>>>> part or if node not exists it just convert from nt to string name ? >>>>>> if pSphere2 not exist then return >>>>>> >>>>>> {0:nt.Transform('pSphere1'), 1:'pSphere2' } >>>>>> >>>>>> >>>>>> >>>>>> Any idea is very much welcome , big thanks !!! >>>>>> >>>>> >>>>> I would advise staying away from the eval() approach. Not only is it >>>>> going to be inflexible for your current goal, it also can cause unwanted >>>>> execution of arbitrary logic. A random code snippet that deletes files >>>>> could be set on a node and your code would blindly execute it as your own >>>>> user. You don't want random code being evaluated like that. >>>>> >>>>> A better approach would be to use a proper serialisation format like >>>>> json or pickle (protocol version 1 for ascii format). This would allow >>>>> you >>>>> to read the data back into a dictionary and then evaluate each value and >>>>> filter what does and does not exist in the scene. >>>>> >>>>> >>>>>> -- >>>>>> You received this message because you are subscribed to the Google >>>>>> Groups "Python Programming for Autodesk Maya" group. >>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>> send an email to python_inside_maya+unsubscr...@googlegroups.com. >>>>>> To view this discussion on the web visit >>>>>> https://groups.google.com/d/msgid/python_inside_maya/3f87dcf5-3171-47e7-bec5-a56d550513d1%40googlegroups.com >>>>>> >>>>>> <https://groups.google.com/d/msgid/python_inside_maya/3f87dcf5-3171-47e7-bec5-a56d550513d1%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>>> . >>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>> >>>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Python Programming for Autodesk Maya" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to python_inside_maya+unsubscr...@googlegroups.com. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/python_inside_maya/09731b94-8047-4136-bd12-a66781210224%40googlegroups.com >>>> >>>> <https://groups.google.com/d/msgid/python_inside_maya/09731b94-8047-4136-bd12-a66781210224%40googlegroups.com?utm_medium=email&utm_source=footer> >>>> . >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "Python Programming for Autodesk Maya" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to python_inside_maya+unsubscr...@googlegroups.com <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/python_inside_maya/70ea3488-20ed-4926-baf3-6e19de71e479%40googlegroups.com >> >> <https://groups.google.com/d/msgid/python_inside_maya/70ea3488-20ed-4926-baf3-6e19de71e479%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> For more options, visit https://groups.google.com/d/optout. >> > -- You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group. To unsubscribe from this group and stop receiving emails from it, send an email to python_inside_maya+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/57c59536-5b1a-4677-a2d8-ede37e3aa7f9%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.