0

基本的に、私のコードの形式は次のとおりです。

class SomeClass():

    # RegEx to remove all non-alphanumeric characters from a string
    def alphaNum(original):
        return str(re.sub(r'[^a-zA-Z0-9]','', original))


    # Write to xlsx file =====================================================
    def write(self):
        #CODE###
        uglyString = 'asasdf-)aws'

        print alphaNum(uglyString)
        #I've also tried calling self.alphaNum(uglyString), for what it's worth

別のファイルから write を呼び出すと、「global name 'alphaNum' is not defined」が表示されます (詳細は省きますが、print ステートメントでエラーが発生することはわかっています)。

私は何かばかげたことを見落としていると確信しています.私は(私がそう思いたいのですが)スコープをうまく扱い、使用する前に物事を定義しています.

編集:

助けてくれてありがとう!クラスの外に alphaNum() を移動するだけになりました。興味のある方のために説明すると、これの実際の目的は、CloudFormation 用の Amazon の boto インターフェイスの癖に対処することです。'-' を含むアセット ID 値を喜んで返し、テンプレートに値を含めることができないと文句を言います。それが人生だ...

4

1 に答える 1

4

alphaNumのメンバーだからですSomeClass。さらに、それは ではないstaticmethodので、最初のパラメーターは である必要がありますself

なぜこれらすべてをクラスに入れているのかよくわかりませんが、代わりに次のようになります。

class SomeClass():

    @staticmethod
    def alphaNum(original):
        """RegEx to remove all non-alphanumeric characters from a string"""
        return str(re.sub(r'[^a-zA-Z0-9]','', original))

    def write(self):
        """Write to xlsx file"""

        uglyString = 'asasdf-)aws'

        print SomeClass.alphaNum(uglyString)
于 2014-11-14T16:24:12.657 に答える