如果方法中的参数未在_init__()中定义,如何在该方法中定义该参数?

2024-04-20 00:58:34 发布

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

例如,我想创建一个类,该类可以在有或没有初始化变量的情况下执行不同的操作,但我想保持它的灵活性,这样,如果在没有该参数的情况下创建该类,则可以在以后使用方法添加该类。我有:

class Kickass(object):

    def __init__(self, website=None)
        if website:
            self.website = website

    def kick_butt(self):

        # Can do stuff even if website == None
        return stuff

    def web_scrape(self, site=None):

        if site:
            try:
                self.website == None
            except ValueError:
                print('Class instance already has a website!')
        # Do operations with method's argument

        if not site:
            if self.website == None:
                raise ValueError('Neither method nor instance have defined a website!')
            else:
            # Do operations with instance's variable

我在上课和处理异常方面仍然很糟糕。提前感谢您的投入


Tags: instanceselfnoneifdefwithsite情况
1条回答
网友
1楼 · 发布于 2024-04-20 00:58:34

除非行为确实异常,否则不应抛出期望在你的情况下,似乎你想检查一个案例,并在此基础上改变你的行为。那就检查一下

if self.website is not None:
    DoThisThing
else:
    DoTheOtherThing

您的try/except没有像您期望的那样工作的原因是try/except没有像if/else那样工作

相反,try/except将首先尝试在try块中运行代码。如果代码运行正常,那么它将跳过EXPECT并继续。但是如果代码抛出并Exception,那么它将运行一个except块,捕获该特定异常

您的try块如下所示:

try:
    self.website == None

现在,如果self.website为None,则try块中的代码解析为True。这不是异常,因此不会执行except块。如果self.website不是none,则此块将解析为False,这也不是异常,因此except块将不会运行

现在,如果您的try块如下所示:

try:
    len(self.website)

try中的代码将抛出TypeError: object of type 'NoneType' has no len()

所以如果你跟在后面

except TypeError:
    print("This will run now")

将执行except块

您可以使用try/except来处理代码抛出的异常(通常在运行时数据与预期数据不同时)。使用if/else指定正常操作情况下的意外事件

相关问题 更多 >