if os.path.exists(temp_dir):
print "Deleting ", temp_dir
try:
shutil.rmtree(temp_dir)
except:
raise
print "Delete complete"
它打印“删除c:\ temp \ metabuild”但是既没有打印任何错误也没有“删除完成”,显然rmtree失败了,但是希望它打印错误是什么,将“引发”打印错误是什么或没有?提前谢谢!
答案 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:
。