Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

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

Offen Anfängerfreundlich
#2,844 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
1/5
Geschätzter Aufwand
Unter einer Stunde
Anfängerfreundlichkeit
88/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
python
Bereich
backend

Rechercherichtung

Der Issue verweist auf googleapiclient/_helpers.py und den Pfad zur Ermittlung des Standardwerts in positional(). Lies diese Funktion und prüfe die vorhandenen Tests für die Verwendung des Decorators ohne Argumente; ergänze Tests für Funktionen ohne Standardwerte und ohne Parameter. Erledigt ist die Aufgabe, wenn diese Fälle beim Decorieren keinen Fehler mehr auslösen und die Tests bestehen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

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)
Vorherrschende Sprache
Python
Sterne
9k
Forks
2.6k
Ø Merge
8 Std. 36 Min.
Gemergte PRs (30 T.)
7

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus googleapis/google-api-python-client

Alle Issues in googleapis/google-api-python-client

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.