跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 自动化脚本按步骤执行 12345,如果 4 失败想回到 2,有哪些实现方法
未分類
19 1 月 2021

自动化脚本按步骤执行 12345,如果 4 失败想回到 2,有哪些实现方法

自动化脚本按步骤执行 12345,如果 4 失败想回到 2,有哪些实现方法

資深大佬 : bytesfold 5

1#. Finite State Machine (FSM)

2#. retry flag (reverse also ok)
1
retry_2_thru_4 = true
while (retry_2_thru_4) {
2
3
if (4) retry_2_thru_4 = false;
}
5

大佬有話說 (15)

  • 資深大佬 : no1xsyzy

    @no1xsyzy 第二种方法不够优雅,第一种方法好难,够我喝一壶了,想知道有没有实现过的库

  • 主 資深大佬 : bytesfold

    @bytesfold 第二种方法很正常,从很久以前(从 Dijkstra 反对 goto 观点被广泛使用之后)就是这么用的了
    如果你觉得不够优雅,那就把 234 封装到一个函数里去,甚至把循环也带进去,跳出直接 return 。

    第一种方法就是无限 goto 制,其实单这个还没到该用 FSM 的程度。
    这就是个很简单的逻辑

  • 資深大佬 : no1xsyzy

    你把每一步封装成一个函数,然后:

    func_list = [
    (func_1, None),
    (func_2, func_1),
    (func_3, func_1),
    (func_4, func_2),
    ]

    for f, f_err in func_list:
    try:
    f()
    except:
    f_err()

  • 資深大佬 : yuelang85

    上状态机吧,没那么难,画好状态以及状态迁移图,能理顺就能写好。

  • 資深大佬 : ytymf

    @bytesfold 第二种很优雅,难道 goto 才是你要的优雅?
    1
    while True:
    2
    3
    if 4:
    break
    5

  • 資深大佬 : frostming

    这种情况当然是 Goto 大法好

    https://pypi.org/project/goto-statement/

  • 資深大佬 : est

    我是写 SHELL 脚本的。12345 每一步的最后给一个状态码。 然后 4 的状态码为 0 是成功。为 1 是错误的。然后写一个==判断就可以了。如果错了再回 2 步骤。

    思路是这样。我不知道大家能不能懂的我意思。

  • 資深大佬 : freelancher

    @yuelang85 如果这样的话,那就可以继续封装函数了
    invoke(func, succ, err) { if (func()) succ() else err() }
    然后就成了
    invoke(func_1, invoke(func_2, invoke(func_3, invoke(func_4, null, func_2), null), null), null)
    null 根据实际情况继续配置

    [套娃警告]

  • 資深大佬 : cpstar

    感觉 LZ 的想法应该是 4 失败了,要回退到 2 运行之前的状况

  • 資深大佬 : cpstar

    @cpstar 这调用栈太复杂了。成函数式了。

    要是状态回滚,那就复杂了,看具体做了什么。。。。

  • 資深大佬 : yuelang85

    如果 12345 当成成不同的状态,不就是个状态机了?

  • 資深大佬 : deplives

    jump,jump,jump

  • 資深大佬 : zepc007

    goto 完美

  • 資深大佬 : q197

    int nProc = 0;
    while (true) {
    swith(nProc) {
    case 0: doProc0();
    case 1: doProc1();
    case 2: doProc2();
    case 3: doProc3();
    case 4: if(!doProc4()) {nProc=2; continue;}
    }
    break;
    }

    @freelancher 说的大概这么个意思(不是正确语法)

  • 資深大佬 : ideno

    transitions==0.8.1

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具