mh0*_*00h 5 python exception-handling exception python-2.7
我正在使用Fabric进行自动化,包括创建目录的任务.这是我的fabfile.py:
#!/usr/bin/env python
from fabric.api import *
def init():
try:
local('mkdir ./www')
except ##what exception?##:
#print exception name to put in above
Run Code Online (Sandbox Code Playgroud)
运行fab fabfile.py和f我已经./www创建了一个错误,但我不知道是什么类型,所以我不知道如何处理错误.Fabric仅打印出以下内容:
mkdir: cannot create directory ‘./www’: File exists
Fatal error: local() encountered an error (return code 1) while executing 'mkdir ./www'
Aborting.
Run Code Online (Sandbox Code Playgroud)
我想要做的是能够找出错误类型,以便我可以正确地除了我的错误没有一揽子陈述.如果答案不只是告诉我如何处理mkdir异常,而是打印(或以其他方式找到名称)我可能遇到的任何异常(mkdir只是一个例子),这将非常有用.
谢谢!
sbe*_*rry 10
问题是Fabric使用子进程来做这些事情.如果查看源代码,local可以看到它实际上没有引发异常.它调用suprocess.Popen并用于communicate()读取stdout和stderr.如果存在非零返回码,则返回对其中一个warn或的调用abort.默认为中止.所以,要做你想做的事,试试这个:
def init():
with settings(warn_only=True):
local('mkdir ./www')
Run Code Online (Sandbox Code Playgroud)
如果您查看源代码abort,它看起来像这样:
10 def abort(msg):
21 from fabric.state import output
22 if output.aborts:
23 sys.stderr.write("\nFatal error: %s\n" % str(msg))
24 sys.stderr.write("\nAborting.\n")
25 sys.exit(1)
Run Code Online (Sandbox Code Playgroud)
因此,异常将是SystemExit异常.虽然你可以抓住这个,但上面概述了使用它的正确方法settings.