Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 返回false而不是抛出错误的设计模式_Python_Oop_Design Patterns - Fatal编程技术网

Python 返回false而不是抛出错误的设计模式

Python 返回false而不是抛出错误的设计模式,python,oop,design-patterns,Python,Oop,Design Patterns,我正在从事一个Python项目,从各种外部源中获取数据。除了一些脚本只是实例化一些对象并调用几个方法之外,所有的东西都是面向对象的。所以所有的逻辑都在不同的类中。 我没有任何具体的代码来说明我的观点 基本上,我有一个函数,它尝试刮取URL,如果成功,则返回数据,否则返回false。 另一个函数saveData()使用此函数的返回值将数据保存到文件中。如果刮取不成功并返回false,则saveData()返回false。然后这就被传下去了,让我们说它一直在继续 之所以scrape()返回false

我正在从事一个Python项目,从各种外部源中获取数据。除了一些脚本只是实例化一些对象并调用几个方法之外,所有的东西都是面向对象的。所以所有的逻辑都在不同的类中。 我没有任何具体的代码来说明我的观点

基本上,我有一个函数,它尝试刮取URL,如果成功,则返回数据,否则返回false。 另一个函数
saveData()
使用此函数的返回值将数据保存到文件中。如果刮取不成功并返回false,则
saveData()
返回false。然后这就被传下去了,让我们说它一直在继续

之所以
scrape()
返回false而不是抛出错误,是因为我将在脚本中使用它来刮取许多URL,我不希望它因为一个错误的URL而死亡

我真的不喜欢这种“滴流”效应,在这种效应中,我必须一路检查错误值,以避免错误

理想的解决方案是,一旦URL无法抓取,就停止处理该URL。我觉得这是一个常见的情况,可能有一些设计模式来避免它


也许这太抽象了。

如果我理解你的要求,那就是找到一个干净的方法,在抓取URL失败时尽早退出。在这种情况下,我将使用带有前哨值的
过滤器
映射

# only used if in python 2
from future_builtins import map, filter

# just make sure your sentinal is a value that cannot be possibly considered valid
_sentinal = None
def scrape(url):
    try:
        return attempt_scrape(url)
    except Exception:
        return _sentinal

url_data = map(scrape, sequence_of_urls)
good_scrapes = filter(lambda v: v is not _sentinal, url_data)  # only return the values we want
saved = map(saveData, good_scrapes)

# force running the chained iterators now
for s in saved:
    pass

这肯定不是一个答案,但我最近一直在玩。也许你会发现它很有用。