我的代码正常工作,除了我想显示相应的错误消息。例如,如果脚本无法连接到Consul,我想显示一个错误,说明这一点。另一方面,如果Consul中不存在密钥(Jira票号),我希望它显示不同的消息。
从Consul获取键/值的功能
def getDeployList(jira_ticket):
try:
c = consul.Consul(config.get('consul','consul_server'))
modules=[]
module_key=[]
index, data = c.kv.get('deploylist/'+jira_ticket, recurse=True)
if data:
for s in data:
if s['Value'] is not None:
key = s['Key'].split('/')[2]
modules.append(key + " - " + s['Value'])
module_key.append(key)
return (module_key,modules)
else:
return False
except:
return False
运行的功能(摘录)
def deployme(obj):
try:
module_key,modules = getDeployList(jira_ticket)
except Exception:
quit()
主要(摘要)
if __name__ == '__main__':
while True:
job = beanstalk.reserve()
try:
deployme(decode_json)
except:
print "There's an issue retrieving the JIRA ticket!"
job.delete()
答案 0 :(得分:3)
您已经在deployme
中捕获了异常。因此,在您的主要内容中,您永远不会发现您正在寻找的异常。相反,你想要做的是raise
,所以你可以抓住一些东西。
另外,正如@gill在评论中明确指出的那样,由于您的错误最有可能发生在您的getDeployList
方法中,因此您应该提高并删除deployme中的try / except。这将允许您保留该退出,如果对getDeployList
的任何调用加注,它将被捕获在您的__main__
代码中。
此外,创建自定义异常(或从您正在使用的模块中引发异常):
class MyCustomException(Exception):
pass
使用getDeployList
方法提升自定义例外:
def getDeployList(jira_ticket):
# logic
raise MyCustomException()
def deployme(obj):
module_key,modules = getDeployList(jira_ticket)
然后你在main中捕获你的异常。它应该工作
if __name__ == '__main__':
try:
deployme(decode_json)
except MyCustomException:
print "There's an issue retrieving the JIRA ticket!"