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))
Code: Select all
foo(90) # Works as expected
foo('90') # Doesn't work, but I want it to
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]