You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用atlassian库创建Jira Issue时遇400错误,求排查方案

Jira API创建Issue报错排查问题

问题场景

使用Python 3.8结合atlassian库创建Jira Issue,代码如下:

from atlassian import Jira
import datetime  # 原代码缺失该导入,属于笔误

jira = Jira(
        url='http://jira.mydomain.com/',
        username='login',
        password='password')
summary = 'Test summary'
description = 'Test description'
current_date = datetime.date.today()
duedate = datetime.datetime.strftime(current_date, "%Y-%m-%d")

fields = {"project": {"key": 'ARL'},
          "summary": summary,
          "description": description,
          "issuetype": {"name": "Task"},
          "duedate": duedate,
          "labels": ["Demo"],
          "components": [{"name": "Selary"}]
             }

执行后触发400 Bad Request错误,完整报错栈:

Creating issue "Test summary"
Traceback (most recent call last):
  File "C:\Users\Max\PycharmProjects\GSheets-Test\venv\lib\site-packages\atlassian\rest_client.py", line 436, in raise_for_status
    j.get("errorMessages", list()) + [k.get("message", "") for k in j.get("errors", dict())]
  File "C:\Users\Max\PycharmProjects\GSheets-Test\venv\lib\site-packages\atlassian\rest_client.py", line 436, in <listcomp>
    j.get("errorMessages", list()) + [k.get("message", "") for k in j.get("errors", dict())]
AttributeError: 'str' object has no attribute 'get'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Max\PycharmProjects\GSheets-Test\test.py", line 37, in <module>
    print(jira.issue_create(fields_arl))
  File "C:\Users\Max\PycharmProjects\GSheets-Test\venv\lib\site-packages\atlassian\jira.py", line 1402, in issue_create
    return self.post(url, data={"fields": fields})
  File "C:\Users\Max\PycharmProjects\GSheets-Test\venv\lib\site-packages\atlassian\rest_client.py", line 333, in post
    response = self.request(
  File "C:\Users\Max\PycharmProjects\GSheets-Test\venv\lib\site-packages\atlassian\rest_client.py", line 257, in request
    self.raise_for_status(response)
  File "C:\Users\Max\PycharmProjects\GSheets-Test\venv\lib\site-packages\atlassian\rest_client.py", line 440, in raise_for_status
    response.raise_for_status()
  File "C:\Users\Max\PycharmProjects\GSheets-Test\venv\lib\site-packages\requests\models.py", line 960, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http://jira.mydomain.com/rest/api/2/issue

已知信息:

  • 切换到其他项目密钥时,Issue可成功创建
  • 管理员称两个项目业务方案、必填字段集合一致,代码中指定的组件"Selary"在ARL项目中存在
  • 给正常项目传入错误组件名称时,会触发相同错误
  • 更换登录账号后问题依旧

错误核心原因

atlassian库的异常处理逻辑预期Jira返回的错误格式是字典列表,但实际返回了字符串,导致抛出AttributeError。但本质是ARL项目存在隐性配置差异,导致Issue创建请求的参数校验失败,触发了Jira的非标准错误响应格式。

需要检查的项目/字段配置

  • 组件与问题类型的关联限制:确认ARL项目中,"Task"类型的Issue是否允许关联"Selary"组件。部分项目会配置组件仅能绑定特定问题类型,即使组件存在,类型不匹配也会报错。
  • 项目级字段的特殊配置:检查ARL项目是否在全局业务方案之外,单独设置了某些字段为必填/隐藏。比如全局非必填的字段,在ARL项目中被设为必填,但代码未传入对应值。
  • 工作流初始状态的字段要求:验证ARL项目中"Task"类型的初始工作流状态,是否强制要求填写某些字段,而代码未提供这些字段的值。
  • 组件的权限配置:确认"Selary"组件是否设置了仅特定用户/组可关联,即使账号有项目权限,也可能缺少组件关联权限(更换账号后问题依旧,可排除单个账号问题,但需确认组件的全局权限规则)。
  • 日期格式的兼容性:检查ARL项目所在Jira实例是否对duedate格式有特殊要求,虽然代码用的是%Y-%m-%d标准格式,但本地化配置的Jira可能需要带时间戳的格式。
  • 问题类型的创建权限:确认登录账号(或所属用户组)在ARL项目中是否拥有"创建Task类型Issue"的权限,即使能访问项目,也可能缺少特定问题类型的创建权限。
  • 获取原始API错误信息:绕过atlassian库的异常处理,直接用requests发送请求查看Jira返回的具体错误提示,这能精准定位问题字段。示例代码:
import requests
import json

url = "http://jira.mydomain.com/rest/api/2/issue"
auth = ("login", "password")
headers = {"Content-Type": "application/json"}
data = {"fields": fields}

response = requests.post(url, auth=auth, headers=headers, data=json.dumps(data))
print(response.status_code)
print(response.text)

内容的提问来源于stack exchange,提问作者Max Chupin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:45:02