Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

[spanner] `run_in_transaction` raises uncaught `IndexError` when `Aborted.errors` is empty

Đang mở
#17,903 0 bình luận 0 reaction 1 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@steotia đang làm issue này rồi.

Từ ngày 31/7/2026.

  • #17905 của @abhi-0203 — đã đóng, không merge

Đánh giá

Issue này chưa được đánh giá.

Mô tả

api: spanner priority: p2 type: bug
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.

Ngôn ngữ chính
Python
Star
5.4k
Fork
1.8k
Merge trung bình
2 ngày 11 giờ
Pull request đã merge (30 ngày)
129

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của googleapis/google-cloud-python

Tất cả issue của googleapis/google-cloud-python

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.