首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >避免出现python案例

避免出现python案例
EN

Stack Overflow用户
提问于 2020-11-04 10:34:58
回答 3查看 63关注 0票数 0

我有以下代码:

schedulingStrategy

  • According检查
  1. 到调度策略
  2. 检查相关调度周期

现在,我只有两种调度策略,因此我的代码非常直接:

代码语言:javascript
复制
def test_scheduling_parameters(schedulingStrategy: str, schedulingPeriod: str):
    """
    :param schedulingStrategy:Could be CRON_DRIVEN or TIMER_DRIVEN
    :param schedulingPeriod: If CRON would be in the form of '* * * * * ?', else XX sec (or min)
    :return:
    """
    sche_strat = ['TIMER_DRIVEN', 'CRON_DRIVEN']
    if schedulingStrategy in sche_strat:
        if schedulingStrategy == 'TIMER_DRIVEN' and re.match('\d+\s(sec|min)$', schedulingPeriod):
            return True
        elif schedulingStrategy == "CRON_DRIVEN" and croniter.is_valid(schedulingPeriod[:-2]):
            return True
        else:
            return "Error: Wrong scheduling period"
    else:
        return "Error: Wrong scheduling strategy"

我想知道,如果我有更多的调度策略,而不是成倍的情况下,我该怎么办?

我有一个想法,有一种字典包含,策略的名称和一个验证函数,这是最好的方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-04 10:53:08

使用一些功能:

代码语言:javascript
复制
import sys
import re
import croniter

def checkstrat_timerdriven(schedulingPeriod):
  return re.match('\d+\s(sec|min)$', schedulingPeriod)

def checkstrat_crondriven(schedulingPeriod):
  return croniter.is_valid(schedulingPeriod[:-2])

def checkstrat_wrongstrat(schedulingPeriod):
  print("Error: Wrong scheduling strategy", file=sys.stderr)
  return False

def test_scheduling_parameters(schedulingStrategy: str, schedulingPeriod: str):
    """
    :param schedulingStrategy:Could be CRON_DRIVEN or TIMER_DRIVEN
    :param schedulingPeriod: If CRON would be in the form of '* * * * * ?', else XX sec (or min)
    :return:
    """
    checkstrat_dict = {'TIMER_DRIVEN': checkstrat_timerdriven, 'CRON_DRIVEN': checkstrat_crondriven}
    checkstrat = checkstrat_dict.get(schedulingStrategy, checkstrat_wrongstrat)
    return checkstrat(schedulingPeriod)
票数 1
EN

Stack Overflow用户

发布于 2020-11-04 10:43:40

如下所示

代码语言:javascript
复制
def test_scheduling_parameters(schedulingStrategy: str, schedulingPeriod: str):
    """
    :param schedulingStrategy:Could be CRON_DRIVEN or TIMER_DRIVEN
    :param schedulingPeriod: If CRON would be in the form of '* * * * * ?', else XX sec (or min)
    :return:
    """
    sche_strat = ['TIMER_DRIVEN', 'CRON_DRIVEN']
    if schedulingStrategy == 'TIMER_DRIVEN' and re.match('\d+\s(sec|min)$', schedulingPeriod):
        return True, ''
    elif schedulingStrategy == 'CRON_DRIVEN' and croniter.is_valid(schedulingPeriod[:-2]):
        return True, ''
    else:
        return False, "Wrong scheduling period" if schedulingStrategy in sche_strat else 'Wrong scheduling strategy'
票数 1
EN

Stack Overflow用户

发布于 2020-11-04 11:01:43

如果您唯一关心的是行数,那么有一个预定义的字典,并将您的键保持为strategy_name,值为validator,如下所示,

代码语言:javascript
复制
def test_scheduling_parameters(schedulingStrategy: str, schedulingPeriod: str):
    """
    :param schedulingStrategy:Could be CRON_DRIVEN or TIMER_DRIVEN
    :param schedulingPeriod: If CRON would be in the form of '* * * * * ?', else XX sec (or min)
    :return:
    """
    scheduling_validation = {
                                   'TIMER_DRIVEN': re.match('\d+\s(sec|min)$', schedulingPeriod),
                                   'CRON_DRIVEN': croniter.is_valid(schedulingPeriod[:-2])
                            }
    if schedulingStrategy in scheduling_validation .keys():
        if scheduling_validation[schedulingStrategy]:
            return True, ''
        else:
            return False, 'Wrong Scheduling Period'
    else:
        return False, 'Wrong Scheduling Strategy'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64678397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档