繁体   English   中英

仅当未在__init __()中定义参数时,才如何在方法中定义参数?

[英]How do I define an argument in a method only if it isn't defined in __init__()?

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

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

我仍然对类和异常处理感到恐惧。 预先感谢您的输入。

除非该行为实际上是例外的,否则您不应期望 在您的情况下,您似乎想检查一个案例,并根据此行为进行更改。 所以只要检查一下

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

您的try / except无法正常运行的原因是try / except无法与if / else正常运行。

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

您的try块如下所示:

try:
    self.website == None

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

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

try:
    len(self.website)

尝试中的代码将引发TypeError: object of type 'NoneType' has no len()

所以如果你跟随

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

您的except块将执行。

您可以使用try / except来处理代码引发的异常(通常是在运行时数据与预期的不同时)。 在正常操作情况下,使用if / else指定紧急情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM