首页 > 解决方案 > 将多个参数限制为每个特定的字符串集

问题描述

我想将多个参数限制为不同的字符串集。按照您的建议,为了使我的问题更清楚,这是我的代码,旨在成为 API 的包装器:

import requests

class Judikatur():
    def __init__(self,
                 category: str,
                 published="Undefined",
                 entscheidungstexte=True,
                 rechtssaetze=True,
                 VfghRequestEntscheidungsart="Undefined",
                 VwghRequestEntscheidungsart="Undefined",
                 BvwgRequestEntscheidungsart="Undefined",
                 LvwgRequestEntscheidungsart="Undefined",
                 GbkRequestEntscheidungsart="Undefined",
                 GbkKommission="Undefined",
                 GbkSenat="Undefined",
                 GbkDiskriminierungsgrund="Undefined",
                 DskRequestEntscheidungsart="Undefined",
                 DskBehoerde="Undefined",
                 PvakBehoerde="Undefined",
                 LvwgBundesland="Undefined"):

然后我继续检查提供的字符串是否被 API 接受。

        if category not in ["Justiz", "Vfgh", "Vwgh", "Bvwg", "Lvwg", "Gbk", "Dsk", "Dok", "Pvak"]:
            raise ValueError('Please provide a valid category. Valid categories are:\n\
                "Justiz" for "Gerichtsentscheidungen";\n\
                "Vfgh" for "Entscheidungen des Verfassungsgerichtshofs";\n\
                "Vwgh" for "Entscheidungen des Verwaltungsgerichtshofs";\n\
                "Bvwg" for "Entscheidungen des Bundesverwaltungsgerichts";\n\
                "Lvwg" for "Entscheidungen der Landesverwaltungsgerichte";\n\
                "Gbk" for "Entscheidungen der Gleichbehandlungskommission";\n\
                "Dsk" for "Entscheidungen der Datenschutzbehörde";\n\
                "Dok" for "Entscheidungen der Disziplinarkommission";\n\
                "Pvak" for "Personalvertretungsaufsichtsbehörde".')

        if published not in ["Undefined", "EinerWoche", "ZweiWochen", "EinemMonat", "DreiMonaten", "SechsMonaten", "EinemJahr"]:
            raise ValueError(
                'Please provide a valid time since publication. The API accepts "Undefined", "EinerWoche", "ZweiWochen", "EinemMonat", "DreiMonaten", "SechsMonaten" or "EinemJahr".')

        if VfghRequestEntscheidungsart not in ["Undefined", "Beschluss", "Erkenntnis", "Vergleich"]:
            raise ValueError(
                'Please provide a valid argument for "VfghRequestEntscheidungsart". The API accepts "Undefined", "Beschluss", "Erkenntnis" or "Vergleich".')

        if VwghRequestEntscheidungsart not in ["Undefined", "Beschluss", "Erkenntnis", "BeschlussVS", "ErkenntnisVS"]:
            raise ValueError(
                'Please provide a valid argument for "VwghRequestEntscheidungsart". The API accepts "Undefined", "Beschluss", "Erkenntnis", "BeschlussVS" or "ErkenntnisVS".')

        if BvwgRequestEntscheidungsart not in ["Undefined", "Beschluss", "Erkenntnis"]:
            raise ValueError(
                'Please provide a valid argument for "BvwgRequestEntscheidungsart". The API accepts "Undefined", "Beschluss" or "Erkenntnis".')

        if LvwgRequestEntscheidungsart not in ["Undefined", "Beschluss", "Erkenntnis", "Bescheid"]:
            raise ValueError(
                'Please provide a valid argument for "LvwgRequestEntscheidungsart". The API accepts "Undefined", "Beschluss", "Erkenntnis" or "Bescheid".')

        # etc.
pass

许多参数采用相似的字符串,但没有一组接受的字符串是相同的。

是否有可能减少上述检查提供的字符串是否被 API 接受的代码?

标签: python

解决方案


枚举是定义一组固定的可能值的常用方法。您的标题要求输入字符串并且问题显示数字,但枚举可以表示为两者之一。

正如您在文档中看到的,您可以指定自己的数字值

class Mood(Enum):
    FUNKY = 1
    HAPPY = 3

以及字符串名称。然后,member.valuemember.name你访问这些。


推荐阅读