私はこのコードを持っています:
folder = "/Users/foreigner/PycharmProjects/Selenium/urls1"
files = [f for f in listdir(folder) if isfile(join(folder, f))]
class DownloadJob(workerpool.Job):
def __init__(self, url, save_to):
self.url = url
self.to = save_to
def run(self):
urllib.urlretrieve(self.url, self.to)
for file in files:
pool = workerpool.WorkerPool(5)
name, ext = splitext(file)
if ext != '.txt':
continue
else:
try:
urls = (url for url in open(join(folder, file)).readlines())
for url in urls:
dir_for_car = "/Users/foreigner/PycharmProjects/Selenium/urls1/media/{0}".format('_'.join(name.split()))
ensure_dir(dir_for_car)
if not os.path.exists(dir_for_car):
os.makedirs(dir_for_car)
if not os.path.exists(dir_for_car):
print "error"
sys.exit(0)
file_for_image = "{0}_{2}_{1}.jpg".format(name, url.strip()[-5:], random_id(10))
job = DownloadJob(url.strip(), join(dir_for_car, file_for_image))
pool.put(job)
log(name, join(dir_for_car, file_for_image))
except:
print "something went wrong"
import traceback
import sys
type_, value_, trace_ = sys.exc_info()
print type_, value_
print traceback.format_tb(trace_)
finally:
pool.shutdown()
pool.wait()
問題は、urlretrieve から例外が発生したときにキャッチされず、コードがfinally
ブロックで停止することです。このコードは 1 つのファイルを処理し、エラーを取得して停止します。他のファイルの操作を続行し、例外のエラー メッセージをログに記録するにはどうすればよいですか?