如何利用Python-Redmine识别未启用问题追踪的Redmine项目以避免报错?
解决Redmine Python API跳过未启用问题追踪项目的问题
方案一:捕获异常跳过项目
直接在查询项目问题时捕获ForbiddenError,遇到该异常就跳过当前项目,继续统计其他项目:
from redminelib.exceptions import ForbiddenError redmine = Redmine('https://redmine.server/redmine', key='1234567890987654321', requests={'verify': False}) projects = redmine.project.all() for project in projects: issueCount = 0 try: # 尝试查询项目所有问题 issues = redmine.issue.filter(project_id=project.identifier, status_id='*') issueCount = len(issues) # 直接用len()替代循环计数更高效 print(f'Project {project.identifier} has {issueCount} issues') except ForbiddenError: # 捕获无权限/未启用问题追踪的异常,跳过该项目 print(f'Project {project.identifier} has no issue tracking enabled, skipped')
方案二:提前检查项目启用模块
通过Redmine项目的enabled_modules属性,提前判断是否开启了问题追踪模块,避免发起无效请求:
redmine = Redmine('https://redmine.server/redmine', key='1234567890987654321', requests={'verify': False}) projects = redmine.project.all() for project in projects: # 获取项目启用的模块列表 enabled_modules = [module.name for module in project.enabled_modules] if 'issue_tracking' not in enabled_modules: print(f'Project {project.identifier} has no issue tracking enabled, skipped') continue # 统计已启用问题追踪项目的问题数量 issues = redmine.issue.filter(project_id=project.identifier, status_id='*') issueCount = len(issues) print(f'Project {project.identifier} has {issueCount} issues')
说明
- 方案一简单直接,适合快速修改代码;方案二更高效,减少不必要的API请求。
- 用
len(issues)替代循环计数,能大幅提升统计效率,因为Python-Redmine的filter返回的集合支持直接取长度。
内容的提问来源于stack exchange,提问作者Mister Rose
相关产品推荐
相关产品推荐

