goto 模块出错 [Python]

Cet*_*her -2 python python-2.7

好吧,首先我要说的是,我知道我使用 goto 模块是不好的,我不应该这样,等等等等。但是,为了这个特定目的,我需要它。我还要说,我是 Python 新手,所以尽量避免复杂的答案,谢谢!

那么,现在让我解释一下我的问题(我使用的是 Linux)。当我运行我的小程序时,它运行良好,直到我输入第一个字符串。输入字符串并按 Enter 键后,出现以下错误:

Traceback (most recent call last):
   File "main.py", line 16, in <module>
      empid = input("Example Input: ")
   File "<string>", line 1, in <module>
   File "/usr/local/lib/python2.7/dist-packages/goto.py", line 255, in _trace
     _addToCaches(filename)
   File "/usr/local/lib/python2.7/dist-packages/goto.py", line 230, in _addToCaches
      in tokenize.generate_tokens(open(moduleFilename, 'r').readline):
IOError: [Errno 2] No such file or directory: '<string>'
Run Code Online (Sandbox Code Playgroud)

我尝试过重新安装模块,重新安装 python,但我不太确定该字符串是否真的会合并到 goto.py 中。

谢谢,
塞瑟

编辑:根据要求,这里是导致问题的代码:

from goto import *
import time
import sys
import os

label .start
os.system('clear')
print "Example Printout"



exampin = input("Example Input: ")
Run Code Online (Sandbox Code Playgroud)

当我在该输入中输入字符串后按 Enter 时,会发生错误。

Aly*_*sen 5

goto.py是一个愚人节笑话。永远不要使用它。如果你认真地使用它,那么你就没有认真地使用Python。然而,来源很简单,所以人们可以从纯粹的学术角度找出为什么会发生这种情况。

goto.py:284包含行sys.settrace(_trace). sys.settrace函数设计供调试器使用,基本上在实际执行之前“捕获”Python 的每一行,以创建这些伪语法第 251 行定义的函数_trace假定将要执行的每一行代码都有一个关联的文件名,并且该文件名可以打开。

但是,当该input函数运行时,它会执行任意 Python 代码来计算该字符串。这是一个糟糕的默认值,但这就是它的作用,并且在 Python 3 中更改为仅返回字符串。当评估代码时,它认为其文件名是<string>. 该文件名不存在,因此当_trace函数看到代码时,它无法打开该文件名并在“调试”时崩溃。

解决方案:确保您永远不会执行没有关联现有文件的代码。避免evalinputexec以及任何在文件外部计算代码的内容。raw_input代替使用。