8

この投稿を担当する前に、私が見つけることができるどこにも尋ねられていません.

を使用してリストの存在を確認しています

if 'self.locList' in locals():
    print 'it exists'

しかし、うまくいきません。それが存在するとは決して考えません。これは、継承を使用してself.いて、それを他の場所で参照しているためであるに違いありません。何が起こっているのかわかりません。

誰でも光を当てることができますか?

完全なコードは次のとおりです。

import maya.cmds as cmds

class primWingS():
    def __init__(self):
        pass
    def setupWing(self, *args):
        pass
    def createLocs(self, list):
        for i in range(list):
    if 'self.locList' in locals():
        print 'it exists'
            else:
                self.locList = []
            loc = cmds.spaceLocator(n = self.lName('dummyLocator' + str(i + 1) + '_LOC'))
            self.locList.append(loc)
            print self.locList


p = primWingS()
4

3 に答える 3

20

私はあなたが欲しいと思いますhasattr(self,'locList')

AttributeErrorただし、通常は属性を使用して、存在しない場合に発生するをキャッチする方がよいでしょう:

try:
    print self.locList
except AttributeError:
    self.locList = "Initialized value"
于 2013-02-25T02:30:07.797 に答える
8

少し違う視点からお答えします。Try ... catchgetattrまたはdirコードを機能させたい場合に使用する方法です。

呼び出しlocals()は、ローカルスコープのディクショナリを返します。つまり、が含まれますselfselfただし、 ( )の子を求めていますself.locList。子供は単に辞書に載っていません。あなたがしていることに最も近いことは次のようになります:

if 'locList' in dir(self):
    print 'it exists'

関数dirは、オブジェクトのアイテムをクエリする一般的な方法です。ただし、他の投稿で説明されているように、速度の観点からオブジェクトの属性を照会することはあまり意味がありません。

于 2013-02-25T13:01:15.537 に答える
1

デフォルト値で try/except または getattr を使用できますが、これらはコードでは意味がありません。オブジェクトを初期化するための __init__ メソッドがあります。

def __init__(self):
    self.locList = []

locList が存在しないことを許可しても意味がありません。長さゼロのリストは、場所のないオブジェクトです。

于 2013-02-25T02:38:28.433 に答える