python-3.x - 如何停止在 python 中出现此附加错误?
问题描述
我们有一个类 ,Message
它对电子邮件消息进行建模。消息具有收件人、发件人和消息文本。该类支持以下方法:
- 一个构造函数,它接受发送者和接收者作为参数
append
它采用一个字符串参数并将其作为新行附加到消息正文中__str__
这使得消息变成一个长字符串,如下所示:“来自:Harry Morgan\nTo:Rudolf Reindeer\n\nCome to the North Pole。”
我不断收到的错误消息在底部,我该如何解决?
这是我的代码:
class Message:
def __init__(self,sender,recipient,message=[]):
self.sender = sender
self.recipient = recipient
self.message = message
def append(self,message):
self.message=self.message.append(message)
def __str__(self):
print("\nFROM: "+sender+"\n"+"TO: "+recipient+"\n\n"+self.message)
def main():
message = []
sender = input('Who is sending the message: ')
recipient = input('Who would you like to send the message to: ')
body = input('Enter body (blank line to quit): ')
while body != '':
message.append(body)
body = input('Enter body (blank line to quit): ')
if body == '':
break
print()
print('FROM:', sender)
print('TO:', recipient)
print()
print(*message,sep='\n')
if __name__ == '__main__':
main()
An error occurred when appending a line to the message!
解决方案
你从来没有实例化你的
Message
类。我的意思是,您从未写过诸如message = Message()
. 因此,不会发生错误。我推荐如下内容:def main(): sender = input('Who is sending the message: ') recipient = input('Who would you like to send the message to: ') message = Message(sender, recipient) body = input('Enter body (blank line to quit): ') while body != '': message.append(body) body = input('Enter body (blank line to quit): ') if body == '': break print(str(message)) if __name__ == '__main__': main()
你的内在之前和之前
__str__
都失踪了self.
sender
recipient
def __str__(self): print("\nFROM: "+ self.sender+"\n"+"TO: "+self.recipient+"\n\n"+self.message)
目前,您的
__str__
方法返回None
并打印字符串。如果你想要实际的字符串怎么办?stryng = str(message)
不会工作,因为stryng
会None
def __str__(self): return "\nFROM: "+ self.sender+"\n"+"TO: "+self.recipient+"\n\n"+self.message
在字符串上使用
+
,例如"hello world" == "hello" + ' ' +" world"
是非常低效的。几乎从不这样做。改用字符串流:import io def __str__(self): with io.StringIO as ss: print( "\nFROM: ", self.sender, "\nTO: ", self.recipient, "\n\n", self.message, file = ss ) stryng = ss.getvalue() return stryng
append
修改“就地”。它不返回修改后的副本。def append(self,message): self.message=self.message.append(message)
如果你不写一个
return
语句,返回什么?None
def append(self,message): self.message=self.message.append(message) return None
运算符右侧是
=
什么?def append(self,message): self.message = None return None
推荐阅读
- oracle - 在 Oracle 12c 中开启 heat_map 参数
- android - 在不丢失当前数据的情况下升级预填充数据库
- python - 构造一个赋值矩阵 - Python
- python - Pandas - 同一列中的不同时间格式
- npm - 纱线不再存在
- mule - mule 自定义策略配置中的 Dataweave 代码
- asp.net-core - 如何将 int 映射到布尔 mvc core2.1
- javascript - X11 xorg Electron App cant open in fullscreen
- mysql - Ruby on Rails 和查询(理解问题)
- sql-server - 在 sql server 2016 的 where 子句中读取 json 值