如何在Python中使用goto语句跳转到指定代码行?

转发自python怎么使用goto跳转执行到指定代码行? | w3c笔记 (w3cschool.cn)

这里只是对网上一些解决方法的总结.

python3.8看这里:

(66条消息) python使用goto的正确用法_追梦小狂魔的博客-CSDN博客_goto python

python3.9看这里:

(66条消息) python3.9实现goto跳转执行_千机我是轻音的博客-CSDN博客_python跳转执行

3.7版本(目前只用了3.7版本运行成功  更低版本不知道行不行):

正文:

在开发过程中我们可能会需要让代码跳转到指定代码行,在汇编和C语言中都可以使用goto关键字进行跳转,那么python跳转到指定代码行要如何实现呢?今天我们就来聊聊python goto跳转。

1. 缘起

在实际开发中遇到这样一个问题:

以下是伪代码

if embedding.model is not exist:
 calculate embedding   ## moudel_1
 save embedding.model
else :
 embedding = load embedding.model

try:
 use embedding
except KeyError:
 calculate embedding    ##这里与moudel_1一致。

发现except 中需要粘贴之前写过的calculate embedding

简单概括就是:

somecode_1
try:
 somecode_2
except:
 somecode_3   
 somecode_1   ## 重新执行

2. 使用goto

(1)安装goto

pip install goto-statement

(2)使用goto完成一个小例子

官方文档见:goto-statement · PyPI

定义函数

from goto import with_goto

@with_goto     #必须有
def test(list_): 
    tmp_list = list_
    label.begin  #标识跳转并开始执行的地方
    result = []
    try:
        for i, j in enumerate(list_):
            tmp = 1 / j
            result.append(tmp)
            last_right_i = i
    except ZeroDivisionError:
        del tmp_list[last_right_i + 1]
        goto.begin      #在有跳转标识的地方开始执行
    return result

这里注意: @with_goto 必须要写在函数开始前 函数里只要用到了goto命令就要写

 调用上面函数运行试试:

a = test([1, 3, 4, 0, 6])
print(a)

如果没报错的话,控制台打印结果为:

[1.0, 0.3333333333333333, 0.25, 0.16666666666666666] 

以上步骤如果没有问题 那就成功了.

另外注意:如果你在ide山运行label 和 goto 下有红色波浪线提示错误。

提示:语句可能无效   之类的 

不用理会直接执行即可

以上内容在3.7版本运行成功:

另外补充

在包安装完并且导入后

@with_goto语句可能会跳灰(或跳红)

这时候就要用到重启电脑大法….重启有时候解决很多问题..

这时候就要用到重启电脑大法….重启有时候解决很多问题.. 

这时候就要用到重启电脑大法….重启有时候解决很多问题..

如果还有问题可以试试下面的方法:

(下面这个方法是百度时候看到的 但是没有用上 但是作为技术储备先放着也是可以的)

—问题背景:
goto-statement包只在python 2.6至3.6上测试通过,3.6以上版本用的时候会出现以下报错:
Traceback (most recent call last):
File "E:/我的文档/新建/bilibili_new/btools.py", line 34, in <module>
def test():
File "E:\Applications\Python\Python38\lib\site-packages\goto.py", line 188, in with_goto
_patch_code(func_or_code.__code__),
File "E:\Applications\Python\Python38\lib\site-packages\goto.py", line 179, in _patch_code
return _make_code(code, buf.tostring())
File "E:\Applications\Python\Python38\lib\site-packages\goto.py", line 53, in _make_code
return types.CodeType(*args)
TypeError: an integer is required (got type bytes)

—解决方案:
先找到自己Python的安装位置,在lib\site-packages文件夹里找到goto.py,打开;
重写函数_make_code为:
def _make_code(code, codestring):
return code.replace(co_code=codestring)
保存修改;
重新
import goto
from goto import with_goto即可。

参考链接:https://github.com/snoack/python-goto/issues/31

 

物联沃分享整理
物联沃-IOTWORD物联网 » 如何在Python中使用goto语句跳转到指定代码行?

发表评论