为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕勒3428872 2019-04-10 20:47:47
#-*-coding:utf-8-*-fromsysimportexitclassnewgame(object):def__init__(self,start):self.start=start#self.cccl()defplay(self):next=self.startwhileTrue:print"\n--------"printnextroom=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,inplayroom=getattr(self,next)TypeError:getattr():attributenamemustbestring请问这是为什么呢?pyenvversionanaconda-2.0.1(setby/usr/local/opt/pyenv/version)但是放到ideone.com上就又不报错了
查看完整描述

2 回答

?
达令说

TA贡献1821条经验 获得超6个赞

getattr第二个参数必须为str,而代码里面next=room()应该是这个room返回了一个非str的东西。说起来room是个什么鬼?代码片段里面根本没出现过。
                            
查看完整回答
反对 回复 2019-04-10
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

正确的写法为room=getattr(self,'next').
你可以认为getattr向对象传递了一条名字叫做'next'的短信,请求'next'的内容.既然是短信,那必须是字符串啦.
                            
查看完整回答
反对 回复 2019-04-10
  • 2 回答
  • 0 关注
  • 369 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信