gpt4 book ai didi

python - 打印 Python 异常类型(在 Fabric 中引发)

转载 作者:太空狗 更新时间:2023-10-30 00:36:27 26 4
gpt4 key购买 nike

我正在使用 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

运行 fab fabfile.py 并且 f I already have ./www created an error is raised, but I don't know what kind, so I don't知道如何处理错误了吗。 Fabric 仅打印出以下内容:

mkdir: cannot create directory ‘./www’: File exists

Fatal error: local() encountered an error (return code 1) while executing 'mkdir ./www'

Aborting.

我想做的是能够找出错误类型,这样我就可以正确地排除我的错误,而无需笼统的陈述。如果答案不只是告诉我如何处理 mkdir 异常,而是打印(或以其他方式找到名称)我可能遇到的任何异常,那将非常有帮助下线(mkdir 只是一个例子)。

谢谢!

最佳答案

问题是 fabric 使用 subprocess 来做这些事情。如果您查看 local 的源代码,您会发现它实际上并没有引发异常。它调用 suprocess.Popen 并使用 communicate() 读取 stdout 和 stderr。如果存在非零返回码,则它返回对 warnabort 的调用。默认为中止。所以,做你想做的,试试这个:

def init():
with settings(warn_only=True):
local('mkdir ./www')

如果您查看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)

因此,异常将是 SystemExit 异常。虽然您可以捕捉到这一点,但上面使用 settings 概述了正确的方法。

关于python - 打印 Python 异常类型(在 Fabric 中引发),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17769405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com