0

私はこのコードを持っています:

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 つのファイルを処理し、エラーを取得して停止します。他のファイルの操作を続行し、例外のエラー メッセージをログに記録するにはどうすればよいですか?

4

0 に答える 0