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

Python处理Jira拒绝原因字段时遇TypeError及语法错误求助

解决Jira字段处理中的TypeError与语法错误

问题场景

处理Jira issue数据时,以下代码在获取rejected_reason字段时触发TypeError:

for issue in issues:
    fields = issue['fields']
    results.append({
        'key': issue['key'],
        'summary': fields['summary'],
        'description': fields['description'],
        'fix_details': get_custom_field_value(fields, 'customfield_25600'),  # Replace with actual custom field ID
        'url': f"{JIRA_SERVER}/browse/{issue['key']}",
        'status' : fields['status']['name'],
        'rejected_reason': fields['customfield_19822']['value']
    })

报错信息:

File "c:\projects\LL\Jira_LL\jira_LL.py", line 84, in query
    'rejected_reason': fields['customfield_19822']['value']
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: 'NoneType' object is not subscriptable

原因是部分issue的customfield_19822字段未填充,值为None,此时无法通过['value']索引取值。

尝试用条件判断修复时,写出的代码触发语法错误:

'rejected_reason': fields['customfield_19822']['value']
             if rejected_reason is not None: 
                   rejected_reason={rejected_reason}
             else
                   rejected_reason=NULL

报错:

if rejected_reason is not None:
                               ^
SyntaxError: invalid syntax

错误分析

  1. TypeError根源:当fields['customfield_19822']为None时,试图对None执行['value']索引操作,Python不允许对NoneType对象做下标访问。
  2. 语法错误原因:
    • Python三元表达式的正确语法是结果 = 真值表达式 if 条件 else 假值表达式,你的写法颠倒了逻辑顺序且缺少必要语法结构。
    • 变量rejected_reason未提前定义,直接使用会触发未定义错误。
    • Python中空值关键字是None,而非NULL。

正确解决方案

方案一:使用字典get()方法链式调用(推荐)

利用get()方法的默认值特性,避免直接索引可能为None的字段:

for issue in issues:
    fields = issue['fields']
    results.append({
        'key': issue['key'],
        'summary': fields['summary'],
        'description': fields['description'],
        'fix_details': get_custom_field_value(fields, 'customfield_25600'),
        'url': f"{JIRA_SERVER}/browse/{issue['key']}",
        'status' : fields['status']['name'],
        # 先获取customfield_19822,默认返回空字典;再从字典中取value,默认返回None
        'rejected_reason': fields.get('customfield_19822', {}).get('value', None)
    })

方案二:正确使用三元表达式

先判断customfield_19822是否不为None,再决定取值:

for issue in issues:
    fields = issue['fields']
    results.append({
        'key': issue['key'],
        'summary': fields['summary'],
        'description': fields['description'],
        'fix_details': get_custom_field_value(fields, 'customfield_25600'),
        'url': f"{JIRA_SERVER}/browse/{issue['key']}",
        'status' : fields['status']['name'],
        'rejected_reason': fields['customfield_19822']['value'] 
                           if fields['customfield_19822'] is not None 
                           else None
    })

方案三:分步处理(可读性更高)

将字段判断逻辑提取出来,再写入字典:

for issue in issues:
    fields = issue['fields']
    # 先处理rejected_reason字段
    rejected_field = fields.get('customfield_19822')
    rejected_reason = rejected_field['value'] if rejected_field is not None else None
    
    results.append({
        'key': issue['key'],
        'summary': fields['summary'],
        'description': fields['description'],
        'fix_details': get_custom_field_value(fields, 'customfield_25600'),
        'url': f"{JIRA_SERVER}/browse/{issue['key']}",
        'status' : fields['status']['name'],
        'rejected_reason': rejected_reason
    })

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:34:53