如何在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