如何使用Python函数

时间:2016-02-23 16:05:41

标签: python

我的代码正常工作,除了我想显示相应的错误消息。例如,如果脚本无法连接到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()

1 个答案:

答案 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!"