python 中 getattr 使用 为什么这样报错?

#-*-coding:utf-8-*-
fromsysimportexit
classnewgame(object):
def__init__(self,start):
self.start=start
#self.cccl()
defplay(self):
next=self.start
whileTrue:
print"\n--------"
printnext
room=getattr(self,next)
next=room()
defdeath(self):
print"thisisdeath"
exit(-1)
defcccl(self):
print"thisisbbbb"
#returnself.al()如果加上return或者exit就成功不加则报错
#exit(1)
defal(self):
print"thisisal"
action=raw_input(">")
ifaction=='1':
return"death"
elifaction=='2':
return"cccl"
ngame=newgame("al")
ngame.play()
line17,inplay
room=getattr(self,next)
TypeError:getattr():attributenamemustbestring
请问这是为什么呢?
pyenvversion
anaconda-2.0.1(setby/usr/local/opt/pyenv/version)
但是放到ideone.com上就又不报错了
慕勒3428872
浏览 370回答 2
2回答

达令说

getattr第二个参数必须为str,而代码里面next=room()应该是这个room返回了一个非str的东西。说起来room是个什么鬼?代码片段里面根本没出现过。

泛舟湖上清波郎朗

正确的写法为room=getattr(self,'next').你可以认为getattr向对象传递了一条名字叫做'next'的短信,请求'next'的内容.既然是短信,那必须是字符串啦.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript