Erstellen Sie dynamisch wörtliche Alias ​​aus der Liste gültiger WertePython

Python-Programme
Anonymous
 Erstellen Sie dynamisch wörtliche Alias ​​aus der Liste gültiger Werte

Post by Anonymous »

Ich habe eine Funktion, die das Argument validiert, nur Werte aus einer bestimmten Liste gültiger Optionen zu akzeptieren. In Bezug auf das Typen spiegele ich dieses Verhalten unter Verwendung eines wörtlichen Typ-Alias ​​wie SO wider:

Code: Select all

from typing import Literal

VALID_ARGUMENTS = ['foo', 'bar']

Argument = Literal['foo', 'bar']

def func(argument: 'Argument') -> None:
if argument not in VALID_ARGUMENTS:
raise ValueError(
f'argument must be one of {VALID_ARGUMENTS}'
)
# ...
Dies ist ein Verstoß gegen das Trockenprinzip, da ich die Liste der gültigen Argumente in der Definition meines wörtlichen Typs neu schreiben muss, auch wenn sie bereits in der variablen valid_argumente gespeichert ist . Wie kann ich das Argument buchstäblicher Typ dynamisch erstellen, angesichts der valid_argumente variable? p>

Code: Select all

from typing import Literal, Union, NewType

Argument = Literal[*VALID_ARGUMENTS]  # SyntaxError: invalid syntax

Argument = Literal[VALID_ARGUMENTS]  # Parameters to generic types must be types

Argument = Literal[Union[VALID_ARGUMENTS]]  # TypeError: Union[arg, ...]: each arg must be a type. Got ['foo', 'bar'].

Argument = NewType(
'Argument',
Union[
Literal[valid_argument]
for valid_argument in VALID_ARGUMENTS
]
)  # Expected type 'Type[_T]', got 'list' instead
Kann es überhaupt durchgeführt werden?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post