String formatting error for arg in dictionary for use in mel.eval

瀏覽次數:20 次
跳到第一則未讀訊息

kiteh

未讀,
2019年3月8日 下午2:41:292019/3/8
收件者:Python Programming for Autodesk Maya
Hi all, I am trying to do a string formatting in which it is in a dictionary format that is to be used in mel command.

This is my mel command - `mel.eval('animLayerMerge{"BaseAnimation", "my_layer"}')`

In my python format, I rewrote as this:
my_naming = 'my_layer'
command
= '"{"BaseAnimation", "{0}"'.format(my_naming)

However this will results in the following error:
# Error: "BaseAnimation", "{0}"
# Traceback (most recent call last):
#   File "<maya console>", line 2, in <module>
# KeyError: '"BaseAnimation", "{0}"' #

No matter how I wrote my `.format`, it will definitely errors out as soon as I tried to incorporate in `{ {0} }` and the reason I am doing this is because I would not want to hardcode the value of `my_naming` as it reads from a text field which would means different naming.

Is there a better way that I can perhaps get around this?

kiteh

未讀,
2019年3月8日 下午2:54:092019/3/8
收件者:Python Programming for Autodesk Maya
Adding on, if I tried using `mel.eval('animLayerMerge{"BaseAnimation", "%s"}' % my_naming)`, while it seems to work, but it mutes out my_layer and instead creates another animation layer called `Merged_Layer`

Robert White

未讀,
2019年3月8日 下午4:18:492019/3/8
收件者:Python Programming for Autodesk Maya
Try:

my_naming = 'my_layer'
command 
= '"{{"BaseAnimation", "{0}"'.format(my_naming)

I believe the problem is that because you've got the single open { the formatting code gets confused. To insert a { into a formatted string you just double them up.

Justin Israel

未讀,
2019年3月8日 下午4:54:012019/3/8
收件者:python_in...@googlegroups.com
https://docs.python.org/2/library/string.html#format-string-syntax

"If you need to include a brace character in the literal text, it can be escaped by doubling: {{ and }}."

Also it seems like you have a typo in your example where you have an extra leading double quote character which would be a syntax error. So I'm assuming that wasn't intentional. 

I would expect it to be like:

my_naming = 'my_layer'
command = '{{"BaseAnimation", "{0}"}} '.format(my_naming)

And I would think the Mel command would be like:

animLayerMerge({...}) 



--
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_m...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/python_inside_maya/2184c17d-b3da-45bb-8c30-f592420efba3%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

kiteh

未讀,
2019年3月8日 下午5:48:132019/3/8
收件者:Python Programming for Autodesk Maya
Got it, thank you so much all!

I wasn't aware of the double curly brackets for such scenarios. Thanks again!
回覆所有人
回覆作者
轉寄
0 則新訊息