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
错误分析
- TypeError根源:当
fields['customfield_19822']为None时,试图对None执行['value']索引操作,Python不允许对NoneType对象做下标访问。 - 语法错误原因:
- Python三元表达式的正确语法是
结果 = 真值表达式 if 条件 else 假值表达式,你的写法颠倒了逻辑顺序且缺少必要语法结构。 - 变量
rejected_reason未提前定义,直接使用会触发未定义错误。 - Python中空值关键字是
None,而非NULL。
- Python三元表达式的正确语法是
正确解决方案
方案一:使用字典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
相关产品推荐
相关产品推荐

