Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Aperta
#17,903 0 commenti 0 reazioni 1 assegnatario Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@steotia ci sta già lavorando.

Dal 31/7/2026.

  • #17905 di @abhi-0203 — chiusa senza merge

Valutazione

Questa issue non è ancora stata valutata.

Descrizione

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.

Lingua principale
Python
Stelle
5.4k
Fork
1.8k
Merge medio
2g 11h
PR unite (30g)
129

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di googleapis/google-cloud-python

Tutte le issue di googleapis/google-cloud-python

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.