[spanner] `run_in_transaction` raises uncaught `IndexError` when `Aborted.errors` is empty
维护者通常 1 天内回复
评估
这个 Issue 还没有评估数据。
描述
Determine this is the right repository
- I determined this is the correct repository in which to report this bug.
Summary of the issue
When google.api_core.exceptions.Aborted is raised inside run_in_transaction with an empty errors attribute (e.g., manually instantiated Aborted("...")), run_in_transaction fails with an uncaught IndexError: list index out of range because it directly accesses exc.errors[0] without checking if exc.errors is empty.
While instantiating Aborted manually without errors may not be the standard path, the SDK should defensively handle empty errors (e.g., falling back to default_retry_delay) instead of crashing with an IndexError.
API client name and version
google-cloud-spanner==3.69.0
Reproduction steps: code
from google.api_core.exceptions import Aborted
from google.cloud import spanner
spanner_client = spanner.Client()
instance = spanner_client.instance("your-instance-id")
database = instance.database("your-database-id")
def callback(transaction):
# Raising Aborted without providing the errors payload
raise Aborted("VersionMismatch: CAS failed")
database.run_in_transaction(callback)
Reproduction steps: supporting files
No response
Reproduction steps: actual results
IndexError: list index out of range
(Occurs inside delay_seconds = _get_retry_delay(exc.errors[0], ...))
Reproduction steps: expected results
The SDK handles empty exc.errors gracefully (e.g., uses default_retry_delay) and executes the transaction retry loop as intended without raising an IndexError.
OS & version + platform
Windows 11
Python environment
Python 3.14.6
Python dependencies
Package Version
certifi 2026.7.22
cffi 2.1.0
charset-normalizer 3.4.9
cryptography 49.0.0
google-api-core 2.33.0
google-auth 2.56.2
google-cloud-core 2.6.0
google-cloud-monitoring 2.31.0
google-cloud-spanner 3.69.0
google-cloud-storage 3.13.0
google-crc32c 1.8.0
google-resumable-media 2.10.0
googleapis-common-protos 1.75.0
grpc-google-iam-v1 0.14.4
grpc-interceptor 0.15.4
grpcio 1.82.1
grpcio-status 1.82.1
idna 3.18
mmh3 5.2.1
opentelemetry-api 1.44.0
opentelemetry-resourcedetector-gcp 1.12.0a0
opentelemetry-sdk 1.44.0
opentelemetry-semantic-conventions 0.65b0
pip 26.1.2
proto-plus 1.28.2
protobuf 7.35.1
pyasn1 0.6.4
pyasn1_modules 0.4.2
pycparser 3.0
requests 2.34.2
sqlparse 0.5.5
typing_extensions 4.16.0
urllib3 2.7.0
Additional context
Defensive check like if exc.errors: before accessing exc.errors[0] would prevent IndexError and make error handling in run_in_transaction much more robust.
- 主要语言
- Python
- 星标
- 5.4k
- 派生
- 1.8k
- 平均合并
- 2 天 18 小时
- 30 天内合并 PR
- 148
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
googleapis/google-cloud-python 的其他 Issue
-
api: spanner type: feature request
难度 2/5 1-3 小时 新手友好度 68/100
googleapis/google-cloud-python#18584 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 82/100
googleapis/google-cloud-python#18532 ·
维护者通常 1 天内回复
-
auth: call_client_cert_callback() discards passphrase for encrypted keys可能已有人在做 @kwy404 于 7 天前认领。 未关闭
难度 1/5 1-3 小时 新手友好度 92/100
googleapis/google-cloud-python#18467 ·
维护者通常 1 天内回复
-
auth: `impersonated_credentials` loses `subject` on copy, so `with_scopes()` and `with_quota_project()` turn off domain wide delegation可能已有人在做 @Om-singhaI 于 19 天前认领。 未关闭auth priority: p2 type: bug
难度 2/5 1-3 小时 新手友好度 88/100
googleapis/google-cloud-python#18428 ·
维护者通常 1 天内回复
-
priority: p2 type: bug
难度 2/5 1-3 小时 新手友好度 72/100
googleapis/google-cloud-python#18375 · 1 条评论 ·
维护者通常 1 天内回复
查看 googleapis/google-cloud-python 的全部 Issue
相似的 Issue
-
HTML: <template> content is extracted as document text可能已有人在做 @ryanmeowy 今天认领。 未关闭bug html
难度 1/5 1 小时以内 新手友好度 82/100
docling-project/docling#4714 · 2 条评论 ·
维护者通常 1 天内回复
-
[BUG] Qdrant RAG client applies score_threshold to raw cosine similarity, not the 0-1 score it returns可能已有人在做 @roydonsequeira 今天认领。 未关闭bug
难度 2/5 1-3 小时 新手友好度 70/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 72/100
ashhart/TensorFold#536 ·
维护者通常 1 天内回复
-
area/install-update comp/cli duplicate P2 python:uv sweeper:risk-compatibility type/bug
难度 1/5 1 小时以内 新手友好度 62/100
NousResearch/hermes-agent#135440 · 1 条评论 ·
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 85/100
Deepak3699/Ai_Mentor#244 ·
维护者通常 1 天内回复