如何避免python中的多个try-except块
我写了一些代码,可以从网站下载图像。它当前的工作方式需要猜测它将从哪个url下载的文件扩展名。执行此操作的代码块如下所示:如何避免python中的多个try-except块,python,exception-handling,Python,Exception Handling,我写了一些代码,可以从网站下载图像。它当前的工作方式需要猜测它将从哪个url下载的文件扩展名。执行此操作的代码块如下所示: for imageLink in imageLinks: try: urllib.request.urlretrieve(imageLink + ".png", str(threadName) + "/" + str(count) + ".png") except: try: urllib.request.urlret
for imageLink in imageLinks:
try:
urllib.request.urlretrieve(imageLink + ".png", str(threadName) + "/" + str(count) + ".png")
except:
try:
urllib.request.urlretrieve(imageLink + ".jpg",str(threadName) + "/" + str(count) + ".png")
except:
try:
urllib.request.urlretrieve(imageLink + ".gif",str(threadName) + "/" + str(count) + ".gif")
except:
urllib.request.urlretrieve(imageLink + ".webm",str(threadName) + "/" + str(count) + ".webm")
目前,代码依靠失败来尝试其他东西。
我想知道他们的设计是否是一种拥有这种功能的方式,但基本上只是为了看起来更好。如果这些方法失败,它们将给出相同的错误,因此我只想按顺序检查它们,直到其中一个有效您可以在函数中使用try/except块,如果控件转到except语句,则返回None。您可以根据自己的需要优化for循环。这里有一个例子:
for ext in ('.png', '.jpg', '.gif', '.webm'):
try:
urllib.request.urlretrieve(imageLink + ext, str(threadName) + "/" + str(count) + ext)
break
except:
pass
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")
可以在函数中使用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")
将请求包装在将URL作为参数传递给的函数中将请求包装在将URL作为参数传递给的函数中