4

我正在尝试处理 jira-python 异常,但我的尝试,除了似乎没有抓住它。我还需要添加更多行才能发布此内容。所以他们在那里,线条。

try:
    new_issue = jira.create_issue(fields=issue_dict)
    stdout.write(str(new_issue.id))
except jira.exceptions.JIRAError:
    stdout.write("JIRAError")
    exit(1)

这是引发异常的代码:

import json


class JIRAError(Exception):
    """General error raised for all problems in operation of the client."""
    def __init__(self, status_code=None, text=None, url=None):
        self.status_code = status_code
        self.text = text
        self.url = url

    def __str__(self):
        if self.text:
            return 'HTTP {0}: "{1}"\n{2}'.format(self.status_code, self.text, self.url)
        else:
            return 'HTTP {0}: {1}'.format(self.status_code, self.url)


def raise_on_error(r):
    if r.status_code >= 400:
        error = ''
        if r.text:
            try:
                response = json.loads(r.text)
                if 'message' in response:
                    # JIRA 5.1 errors
                    error = response['message']
                elif 'errorMessages' in response and len(response['errorMessages']) > 0:
                    # JIRA 5.0.x error messages sometimes come wrapped in this array
                    # Sometimes this is present but empty
                    errorMessages = response['errorMessages']
                    if isinstance(errorMessages, (list, tuple)):
                        error = errorMessages[0]
                    else:
                        error = errorMessages
                elif 'errors' in response and len(response['errors']) > 0:
                    # JIRA 6.x error messages are found in this array.
                    error = response['errors']
                else:
                    error = r.text
            except ValueError:
                error = r.text
        raise JIRAError(r.status_code, error, r.url)
4

4 回答 4

8

我知道我没有回答这个问题,但我觉得我需要警告那些可能被该代码混淆的人(就像我所做的那样)......也许你正在尝试编写你自己的 jira-python 版本或者它是一个旧版本版本?

无论如何,这里是 JIRAError 类的 jira-python 代码的链接,这里是代码列表

要从该包中捕获异常,我使用以下代码

from jira import JIRA, JIRAError
try:
   ...
except JIRAError as e:
   print e.status_code, e.text
于 2016-08-18T22:29:51.253 回答
4

也许这很明显,这就是为什么您的代码粘贴中没有它,以防万一,您确实有

from jira.exceptions import JIRAError

在您的代码中的某个地方,对吗?

没有足够的评论声誉,所以我会添加它来回答@arynhard:我发现文档非常简单,特别是在示例方面,您可能会发现此 repo 中的脚本很有用,因为它们都在利用 jira-python以某种方式。 https://github.com/eucalyptus/jira-scripts/

于 2015-01-05T06:29:18.180 回答
2

我可能是错的,但看起来你正在捕捉jira.exceptions.JIRAError,同时提高JIRAError- 这些是不同的类型。您需要jira.exceptions.从语句中删除 " " 部分,或者改为exceptraise 。jira.exceptions.JIRAError

于 2013-10-05T04:22:28.907 回答
1

好的,这是一个非常旧的问题,但我遇到了同样的问题,这个页面仍然出现。

这是我捕获异常的方法,我使用了异常对象。

 try:
        issue = jira.issue('jira-1')
 except  Exception as e:
        if 'EXIST' in e.text:
                print 'The issue does not exist'
                exit(1)

问候

于 2015-04-22T12:02:33.690 回答