当前位置:   article > 正文

python怎么使用goto跳转执行到指定代码行?_python跳转语句goto

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. 缘起

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

以下是伪代码

  1. if embedding.model is not exist:
  2. calculate embedding ## moudel_1
  3. save embedding.model
  4. else :
  5. embedding = load embedding.model
  6. try:
  7. use embedding
  8. except KeyError:
  9. calculate embedding ##这里与moudel_1一致。

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

简单概括就是:

  1. somecode_1
  2. try:
  3. somecode_2
  4. except:
  5. somecode_3
  6. somecode_1 ## 重新执行

2. 使用goto

(1)安装goto

pip install goto-statement

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

官方文档见:goto-statement · PyPI

定义函数

  1. from goto import with_goto
  2. @with_goto #必须有
  3. def test(list_):
  4. tmp_list = list_
  5. label.begin #标识跳转并开始执行的地方
  6. result = []
  7. try:
  8. for i, j in enumerate(list_):
  9. tmp = 1 / j
  10. result.append(tmp)
  11. last_right_i = i
  12. except ZeroDivisionError:
  13. del tmp_list[last_right_i + 1]
  14. goto.begin #在有跳转标识的地方开始执行
  15. return result

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

 调用上面函数运行试试:

  1. a = test([1, 3, 4, 0, 6])
  2. 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

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/222180
推荐阅读
相关标签
  

闽ICP备14008679号