需要实现嵌套的try语句,但有一个例外

时间:2013-12-13 02:18:04

标签: python try-catch

我正在尝试将路径下的不同文件夹中的文件复制到我的USB驱动器中。 所以我的源目录结构看起来像这个

/用户/阿伦/音乐/歌曲/

在此我有不同的子目录

Songs_1 Songs_2 Songs_3

目标文件夹位于这些Songs目录中的任何一个

Songs_1 / Kid Rock /整个夏天.mp3
Songs_2 / Linkin Park /在end.mp3

现在我正在尝试以这样的方式构建我的src_dir。

for album,song in song_database.iteritems():
    for s in song:
        try:
            src_dir_1 = src_dir + "/" + "Songs_1" + "/" + album + "/" + s + ".mp3"
            shutil.copy2(src_dir_1,dest_dir
            print src_dir_1
        except IOError:
            pass
        try:
            src_dir_1 = src_dir + "/" + "Songs_2" + "/" + album + "/" + s + ".mp3"
            shutil.copy2(src_dir_1,dest_dir)
            print src_dir_1
        except IOError:
            pass
        try:
            src_dir_1 = src_dir + "/" + "Songs_3" + "/" + album + "/" + s + ".mp3"
            shutil.copy2(src_dir_1,dest_dir)
            print src_dir_1
        except IOError:
            pass
        try:
            src_dir_1 = src_dir + "/" + "Songs_4" + "/" + album + "/" + s + ".mp3"
            shutil.copy2(src_dir_1,dest_dir)
            print src_dir_1
        except IOError:
            pass

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

似乎循环会更好:

for album,song in song_database.iteritems():
    for s in song:
        for sdir in 'Songs_1', 'Songs_2', 'Songs_3':
            try:
                src_dir_1 = src_dir + "/" + sdir + "/" + album + "/" + s + ".mp3"
                shutil.copy2(src_dir_1,dest_dir)
                print src_dir_1
            except IOError:
                pass

而且,如果您成功将源复制到目的地,也许您想要添加break语句...

作为旁注,您可能希望改为使用os.path.join

src_dir_1 = os.path.join(src_dir, sdir, album, s + ".mp3")