python2.7 - python 中 getattr 使用 为什么这样报错?
巴扎黑
巴扎黑 2017-04-17 14:52:41
0
2
929
#-*-coding:utf-8-*-
from sys import exit 


class newgame(object):
    def __init__(self, start): 
        self.start = start
        #self.cccl()

    def play(self):
        next = self.start

        while True:
            print "\n--------"
            print next
            room = getattr(self, next)
            next = room()

    def death(self):
        print "this is death"
        exit(-1)


    def cccl(self):
        print "this is bbbb"
        #return self.al() 如果加上return 或者 exit 就成功不加则报错
        #exit(1) 

    def al(self):
        print "this is al"
        action = raw_input("> ")
        if action == '1':
                return "death"
        elif action == '2':
                return "cccl"

ngame = newgame("al")
ngame.play()

line 17, in play
room = getattr(self, next)
TypeError: getattr(): attribute name must be string

请问这是为什么呢?
pyenv version
anaconda-2.0.1 (set by /usr/local/opt/pyenv/version)

但是放到 ideone.com 上就又不报错了

巴扎黑
巴扎黑

全員に返信(2)
巴扎黑

getattr 2 番目のパラメータは str である必要があり、コード内の next = room() はこの room code> は str 以外の値を返しました。そういえば、room とは一体何でしょうか?コードスニペットにはまったく表示されません。

いいねを押す +0
Ty80

正しい書き方は room = getattr(self, 'next') です。

getattr は、'next' という名前のテキスト メッセージをオブジェクトに渡し、'next' のコンテンツを要求すると考えることができます。これは SMS です。文字列である必要があります。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート