Python Fabric:处理异常,以便我可以在try块中捕获它
我正试图找到一种处理织物错误的方法 示例:如果我的远程主机因维护而停机,并且我的应用程序正在运行,试图对其进行一些操作,我会从Fabric中得到一个异常。这会阻止我的应用程序,并打印可怕的堆栈跟踪 为了避免这种情况,因为我需要知道主机何时停机,所以我使用try块将请求包装到remote,但我不确定应该在except块中放入什么,以便只捕获来自Fabric的异常(如networkError和类似的异常)Python Fabric:处理异常,以便我可以在try块中捕获它,python,fabric,Python,Fabric,我正试图找到一种处理织物错误的方法 示例:如果我的远程主机因维护而停机,并且我的应用程序正在运行,试图对其进行一些操作,我会从Fabric中得到一个异常。这会阻止我的应用程序,并打印可怕的堆栈跟踪 为了避免这种情况,因为我需要知道主机何时停机,所以我使用try块将请求包装到remote,但我不确定应该在except块中放入什么,以便只捕获来自Fabric的异常(如networkError和类似的异常) 使用织物处理试块的正确方法是什么?或者更具体地说,我应该在“except”块中添加什么,这样它
使用织物处理试块的正确方法是什么?或者更具体地说,我应该在“except”块中添加什么,这样它将捕获来自fabric的任何异常,并避免整个应用程序退出并打印出堆栈错误?那么您想知道什么时候以某种方式发生这种情况吗?捕获此异常(具有可能导致此情况的确切异常集,不要尝试捕获太多)并让它通过电子邮件或类似的方式发送给您,然后重新发送相同的异常,以便您知道发生了什么
编辑。不在屏幕上显示回溯是很容易的,但我不确定我建议完全避免回溯。实现日志记录是一个很好的选择,或者将回溯格式化为您想要的也是可以接受的。查看回溯模块日志记录。异常在捕获错误后将输出回溯:
import logging
try:
1/0
except Exception as e:
logging.exception(e)
ERROR:root:division by zero
Traceback (most recent call last):
File "/home/padraic/Dropbox/python/py3/size.py", line 105, in <module>
1/0
ZeroDivisionError: division by zero
Process finished with exit code 0
还有一个:
默认值:无
Fabric通常通过向stderr打印错误消息并调用sys.exit(1)来处理中止。此设置允许您覆盖该行为(当env.abort_exception为None时会发生这种情况)
给它一个callable,它接受一个字符串(可能已打印的错误消息)并返回一个异常实例。然后引发该异常对象,而不是SystemExit(sys.exit就是这样做的)
大多数情况下,您只需将其设置为异常类,因为这些异常类完全符合上述描述(可调用、获取字符串、返回异常实例)。例如env.abort_exception=MyExceptionClass
我主要希望避免在屏幕上打印堆栈,并避免应用程序停止。我可以对异常进行微调,但我主要希望捕获来自Fabric的异常,并从这里开始非常感谢!因此,我只尝试了warn_,但当我调用例如命令超时时,仍然会出现异常。我希望有一个全球性的方式来告诉Fabric不要提出例外。env.abort_异常似乎是一种可行的方法,但如果我理解正确的话,这意味着要编写一个带有异常实现的空类。是的,就是这样。您创建的类可能继承自
Exception
from fabric.api import settings
with settings(warn_only=True):
p = run('sudo foo')
if p.return_code == 0:
...
elif p.return_code == 1:
....