首页 > 解决方案 > 如何停止在 python 中出现此附加错误?

问题描述

我们有一个类 ,Message它对电子邮件消息进行建模。消息具有收件人、发件人和消息文本。该类支持以下方法:

我不断收到的错误消息在底部,我该如何解决?

这是我的代码:

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!

标签: python-3.x

解决方案


  1. 你从来没有实例化你的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()
    
  2. 你的内在之前和之前__str__都失踪了self.senderrecipient

    def __str__(self):
        print("\nFROM: "+ self.sender+"\n"+"TO: "+self.recipient+"\n\n"+self.message)
    
  3. 目前,您的__str__方法返回None并打印字符串。如果你想要实际的字符串怎么办?stryng = str(message)不会工作,因为stryngNone

    def __str__(self):
        return "\nFROM: "+ self.sender+"\n"+"TO: "+self.recipient+"\n\n"+self.message
    
  4. 在字符串上使用+,例如"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
    
  5. 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
    

推荐阅读