[英]Python exceptions - a function with try…except clause in a loop
我經常遇到這樣的情況:
import os
for i in range(10):
os.mkdir(i)
但是,有時目錄已經存在,在這種情況下os.mkdir會引發OSError。 當發生這種情況時,我只是希望它跳過循環的其余部分並移動到i的下一次迭代,所以我經常寫這樣的東西:
for i in range(10):
try:
os.mkdir(i)
except OSError:
continue
但是,我真正想要的是一個封裝該行為的函數。 像這樣的東西:
def custom_mkdir(directory):
try:
os.mkdir(directory)
except OSError:
continue
這樣我可以有一些像這樣的代碼:
for i in range(10):
custom_mkdir(i)
具有預期的行為,如果目錄不存在,它會跳轉到for循環的下一個交互,如果它存在的話。
但是,continue語句不能以這種方式包含在函數中。 因此,如何不采取以下措施來獲得預期的行為:
for i in range(10):
try:
custom_mkdir(i)
except OSError:
continue
哪個比第一個更糟?
好吧,如果循環內部沒有其他內容,你可以這樣做:
def custom_mkdir(directory):
try:
os.mkdir(directory)
except OSError:
pass
for i in range(10):
custom_mkdir(i)
如果在custom_mkdir
下面實際上有更多代碼,我認為你能做的最好的是:
def custom_mkdir(directory):
try:
os.mkdir(directory)
return True
except OSError:
return False
for i in range(10):
if not custom_mkdir(i):
continue
要么
for i in range(10):
if custom_mkdir(i):
# The rest of the logic in here
至少比原作簡潔一點。
當OSError
被捕獲在custom_mkdir
,您的函數真正想要做的就是什么都不做。 因此,什么都不做:
def custom_mkdir(directory):
try:
os.mkdir(directory)
except OSError:
pass
回來一個布爾:
def custom_mkdir(directory):
try:
os.mkdir(directory)
except OSError:
return False
return True
for i in range(10):
if not custom_mkdir(directory): continue
碼:
def cusyom_mkdir(diectory):
try:
os.mkdir(directory)
return True
except OSError:
return False
status = map(cusyom_mkdir,[i for i in range(10)])
要么
def cusyom_mkdir(diectory):
try:
os.mkdir(directory)
return True, directory
except OSError:
return False, directory
status = map(cusyom_mkdir,[i for i in range(10)])
您可以看到目錄創建失敗,目錄創建失敗
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.