如何避免多次尝试,除了阻止python

时间:2018-12-19 17:39:05

标签: python exception-handling

我有一些编写的代码可以从网站下载图像。当前的工作方式需要猜测将从其下载的URL的文件扩展名。这样做的代码块如下所示:

class C:
    def __init__(self):
        self._x = None

    @property
    def x(self):
        print 'getter'
        return self._x

    @x.setter
    def x(self, x):
        print 'setter'
        self._x = x


def main():
    C.x = 5
    print C.x


if __name__ == '__main__':
    main()

就目前的情况而言,代码依靠失败来尝试其他尝试。 我想知道他们是否是拥有此功能的一种方式,但是基本上只是看起来更好。如果这些方法失败,它们将给出相同的错误,所以我想按顺序进行检查,直到一种方法有效

2 个答案:

答案 0 :(得分:5)

for ext in ('.png', '.jpg', '.gif', '.webm'):
    try:
        urllib.request.urlretrieve(imageLink + ext, str(threadName) + "/" + str(count) + ext)
        break
    except:
        pass

答案 1 :(得分:0)

您可以在函数内使用try / except块,如果控件转到except语句,则返回None。您可以根据自己的需要优化for循环。一个示例在这里:

def get_url(link1, link2):
try:
    requestData = urllib.request.urlretrieve(link1, link2)
except:
    return None
return requestData

for imageLink in imageLinks:
data = urllib.request.urlretrieve(imageLink + ".png", str(threadName) + "/" + str(count) + ".png")
if data == None:
    data = urllib.request.urlretrieve(imageLink + ".jpg",str(threadName) + "/" + str(count) + ".png")
    if data == None:
        data = urllib.request.urlretrieve(imageLink + ".gif",str(threadName) + "/" + str(count) + ".gif")
        if data == None:
            urllib.request.urlretrieve(imageLink + ".webm",str(threadName) + "/" + str(count) + ".webm")