python shutil.rmtree打印错误,如果有的话

时间:2013-12-10 20:46:31

标签: python

if os.path.exists(temp_dir):
    print "Deleting ", temp_dir
    try:
        shutil.rmtree(temp_dir)
    except:
        raise
print "Delete complete"

它打印“删除c:\ temp \ metabuild”但是既没有打印任何错误也没有“删除完成”,显然rmtree失败了,但是希望它打印错误是什么,将“引发”打印错误是什么或没有?提前谢谢!

1 个答案:

答案 0 :(得分:2)

  

会“提高”打印出错误是什么?

不,所有raise都会重新引发异常,就好像你没有抓住它一样。特别是,这段代码:

try:
    shutil.rmtree(temp_dir)
except:
    raise

...保证做同样的事情(除了稍慢和可读性更低):

shutil.rmtree(temp_dir)

如果异常最终传播到顶层而不在任何地方处理,Python将打印回溯并退出。但是,如果其他一些代码在链上的任何地方处理异常,它可以做任何想做的事情。

如果要打印异常,则必须明确地执行此操作。例如:

try:
    shutil.rmtree(temp_dir)
except Exception as e:
    print(e)
    raise

如果您想获得比print(e)print(repr(e))更多的信息,请参阅traceback库,其中包含用于检索或转储有关异常及其回溯的信息的各种函数。特别是,要获得相同的输出,如果这发生在顶层,你可以这样做:

try:
    shutil.rmtree(temp_dir)
except Exception as e:
    traceback.print_exc()
    raise

因为print_exc直接从Python的内容中获取异常对象和其他信息,所以你真的不需要这里的except Exception as e:;您可以使用except Exception:except: