如何在Python中捕获此异常?

时间:2012-12-24 05:12:16

标签: python exception-handling

如果用户输入了不存在的错误目录名,则rsync会生成此错误。我在Python中使用subprocess.Popen。我如何在Python中捕获此错误?

rsync: link_stat "/fdsfsd" failed: No such file or directory (2)
    rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1637) [Receiver=3.1.0dev]
    rsync: [Receiver] write error: Broken pipe (32)

1 个答案:

答案 0 :(得分:3)

这似乎不是例外,而是由rsync打印的错误。因此,您无法在Python中捕获它。您可以做的是监视Popen对象的返回代码,以查看进程是否成功终止。阅读returncode上的文档。

如果您想尝试解析错误消息,我想您可以尝试使用正则表达式,但它可能不值得。当您调用外部进程时,没有通用的方法来了解其打印的错误消息如何映射到Python异常类型。该程序可以做任何事情,并以任何未知的方式失败。你最好的选择就是查看返回码,如果它不为零,则提出一个异常,说“外部进程以某种方式失败”。这基本上是subprocess.check_call为你做的事情。