我想在酒店访客未添加有效电子邮件地址时引发TypeError

2024-05-14 10:27:00 发布

您现在位置:Python中文网/ 问答频道 /正文

当酒店访客未添加有效的电子邮件地址时,我想引发TypeError,但我收到的却是此错误:

Traceback (most recent call last): File "/Users/Bex/PycharmProjects/Programmes/OOP/Hotel.py", line 43, in jane = Hotel.from_string("Jane,Doe,janedoe@gmail.com") File "/Users/Bex/PycharmProjects/Programmes/OOP/Hotel.py", line 15, in from_string return cls(first_name, last_name, email) File "/Users/Bex/PycharmProjects/Programmes/OOP/Hotel.py", line 25, in init raise TypeError("You've entered an invalid email address.") TypeError: You've entered an invalid email address.

class Hotel:
    visitors = 0
    rooms = ['single', 'double', 'queen', 'king', 'executive']

    @classmethod
    def display_no_of_visitors(cls):
        if Hotel.visitors > 0:
            return "There are currently {} visitor(s)".format(Hotel.visitors)
        else:
            return "There are no visitors currently at the hotel"
    enter code here
    @classmethod
    def from_string(cls, str):
        first_name, last_name, email = str.split(",")
        return cls(first_name, last_name, email)


    def __init__(self, first_name, last_name, email):
        self.first_name = first_name
        self.last_name = last_name
        for char in email:
            if char in "@":
                self.email = email
            else:
                raise TypeError("You've entered an invalid email address.")
        Hotel.visitors += 1

    @property
    def email(self):
        return self.email

    def __repr__(self):
        return "Full Name: {} {}\n Email Address: {}".format(self.first_name, self.last_name, self.email)

    def full_name(self):
        return "{} {}".format(self.first_name, self.last_name)

    def checkout(self):
        Hotel.visitors -= 1
        return "{} {} has checked out".format(self.first_name, self.last_name)


jane = Hotel.from_string("Jane,Doe,janedoe@gmail.com")

print(jane.first_name)
print(jane.last_name)`enter code here`
print(jane.display_no_of_visitors())
print(jane.email)

Tags: nameinfromselfstringreturnemaildef
1条回答
网友
1楼 · 发布于 2024-05-14 10:27:00

欢迎来到SO,Alex

__init__中,它提升了TypeError,因为它使用循环检查是否每个字符都是@,并且因为不是每个字符都是,所以失败。相反,您可以放弃循环,然后像这样检查它:

def __init__(self, first_name, last_name, email):
    self.first_name = first_name
    self.last_name = last_name

    if "@" in email:
        self.email = email
    else:
        raise TypeError("You've entered an invalid email address.")
    Hotel.visitors += 1

现在,这似乎没有错误。 您还需要删除一些额外的代码,以避免第11行和第46行出现语法错误

相关问题 更多 >

    热门问题