Wie kann der Zwangsmodus von Pydantics nicht streng, für ganzzahlige Literale gelten?

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Wie kann der Zwangsmodus von Pydantics nicht streng, für ganzzahlige Literale gelten?

by Guest » 14 Feb 2025, 04:55

Ich validiere Eingaben für eine Funktion unter Verwendung von Pydantics @validate_call wie folgt:

Code: Select all

from typing import Literal
from pydantic import validate_call

@validate_call
def foo(a: Literal[0, 90, 180, 270]) -> None:
print(a, type(a))
Ich möchte, dass Pydantic seinen Standardtyp-Zwang ausführt, wie es mit dem int Typ:

Code: Select all

foo(90)    # Works as expected
foo('90')  # Doesn't work, but I want it to
Wenn ich die Annotation A: int verwende, erzwungen es, Strings wie '180' zu erzwingen, aber dann muss ich manuell validieren, welche Ganzzahlen angegeben werden. < /p>
Wie mache ich Pydantic -Typ -Zwang für Literale? Dies erfordert, dass ein < /code> ein String -Typ anstelle einer Ganzzahl ist, solange er immer noch sowohl eine Ganzzahl- als auch die String -Eingabe ermöglicht. < /em> < /p>

< H3> Schlechte Lösungen < /h3>

[*] Ich möchte nicht jeden wörtlichen Fall hinzufügen. Buchstäblich [0, 90, 180, 270, '0', '90', '180', '270'] ist schlecht, weil es die Zeichenfolgen nicht zulässt. '-0' oder ' 180.0 '. Annotiert [int, field (ge = 90, le = 90)] | ... , aber das ist dumm ausführlich. Zu diesem Zeitpunkt ist es einfacher, nur a: int zu akzeptieren und den bestimmten Wert innerhalb der Methode zu validieren.

[/u]

Top