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

fix: @_helpers.positional raises TypeError when decorating functions without default arguments

Aperta Adatta ai principianti
#2,845 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@codeXsidd ci sta già lavorando.

Dal 22/10/2026.

  • #2846 di @codeXsidd — aperta

Valutazione

Difficoltà
1/5
Tempo stimato
Meno di un'ora
Idoneità per principianti
88/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python
Ambito
backend

Direzione di ricerca

L’issue indica googleapiclient/_helpers.py e include una riproduzione che usa @_helpers.positional. Leggi l’inferenza degli argomenti di positional() mostrata nell’issue, poi esegui i test esistenti pertinenti per questo helper. Il lavoro è completato quando decorare una funzione senza argomenti predefiniti o senza parametri non genera più TypeError e i test esistenti dell’helper passano.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Problem

When @googleapiclient._helpers.positional is used as a bare decorator without arguments (e.g., @positional) on a callable that does not define default argument values (or takes no parameters), it raises TypeError: object of type 'NoneType' has no len() at function definition time.

Current Behavior

In googleapiclient/_helpers.py, positional() infers the maximum number of positional arguments when called without arguments:

    if isinstance(max_positional_args, int):
        return positional_decorator
    else:
        args, _, _, defaults, _, _, _ = inspect.getfullargspec(max_positional_args)
        return positional(len(args) - len(defaults))(max_positional_args)

When max_positional_args has no default parameters (or takes 0 parameters), inspect.getfullargspec(max_positional_args).defaults returns None.
Evaluating len(defaults) then raises:
TypeError: object of type 'NoneType' has no len()

Expected Behavior

When @positional is used without arguments on a function without default parameters (such as def func(a, b): ...), defaults should default to an empty sequence (e.g., len(defaults or ())), correctly calculating len(args) - 0 = len(args) positional parameters instead of crashing with a TypeError.

Reproduction

from googleapiclient import _helpers

@_helpers.positional
def my_function(a, b):
    return a + b

Result:

TypeError: object of type 'NoneType' has no len()

Technical Context

In googleapiclient/_helpers.py, replacing len(defaults) with len(defaults or ()) safely treats None as 0 default arguments:

args, _, _, defaults, _, _, _ = inspect.getfullargspec(max_positional_args)
return positional(len(args) - len(defaults or ()))(max_positional_args)
Lingua principale
Python
Stelle
9k
Fork
2.6k
Merge medio
8h 36m
PR unite (30g)
7

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-api-python-client

Tutte le issue di googleapis/google-api-python-client

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.