例如,我想创建一个可以使用或不使用初始化变量来执行不同操作的类,但我希望保持灵活性,以便在没有该参数的情况下创建类时,可以使用方法稍后。我有:
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
我在课程和处理异常方面仍然很糟糕。提前感谢您的意见。
答案 0 :(得分:1)
if self.website is not None:
DoThisThing
else:
DoTheOtherThing
你的尝试/除外没有像你期望的那样工作的原因是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)
try中的代码会抛出TypeError: object of type 'NoneType' has no len()
所以,如果你跟着
except TypeError:
print("This will run now")
你的except块会执行。
使用try / except来处理代码抛出的异常(通常在运行时数据与预期的不同时)。在正常操作情况下使用if / else指定意外事件。