转到模块[Python]中出错

转到模块[Python]中出错,python,python-2.7,Python,Python 2.7,好的,让我先说我知道使用goto模块是不好的,我不应该这样,诸如此类。然而,为了这个特殊的目的,我需要它。我还要说,我是Python新手,所以请尽量避免复杂的答案,谢谢 现在让我来解释一下我的问题(我在Linux上)。当我运行我的小程序时,它运行良好,直到我输入第一个字符串。键入字符串并按enter键后,会出现以下错误: Traceback (most recent call last): File "main.py", line 16, in <module> e

好的,让我先说我知道使用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>'

当我在输入中输入字符串后按enter键时,就会发生错误。

在Python中没有绝对需要goto的用例。在最坏的情况下,请使用一个工具,并更手动地跟踪您的状态

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

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

但是,当运行
input
函数时,它会执行任意Python代码来计算字符串。这是一个愚蠢的行为,但它就是这样做的,在Python3中它被更改为只返回字符串。对代码求值时,它将其文件名视为
。此文件名不存在,因此当
\u trace
函数看到代码时,它无法打开文件名并在“调试”时崩溃


解决方案:确保您永远不会执行没有与之关联的现有文件的代码。避免使用
eval
input
exec
,以及任何在文件之外计算代码的方法。使用
raw\u input

请显示导致错误的代码。“我是python新手,因此我使用goto”与“我是python新手,因此我使用eval”一样有意义。我建议在你开始做这样的事情之前先了解一下语言:P@Cether如果您需要转到,那么您使用的Python是错误的。在您指定的链接中,它甚至说这是一个愚人节的笑话,意味着永远不会在真正的代码中使用。它甚至不能保证它能在Python的未来版本中工作(这可能是它不能工作的原因)。为什么您需要转到
?为什么使用
input
而不是
raw\u input
?你确定你真的需要运行
os.system('clear')
?@Cether,你的问题是你的程序需要
goto
模块,但是你在上面评论说你知道这是个笑话,你只是对它为什么不起作用感兴趣?是哪一个?那是我的问题。谢谢。@Cether和往常一样,警告的话是:不要使用
goto
。几乎所有在C中有意义的
goto
情况都可以被循环、函数和异常所取代。出于好奇,你首先为什么真的需要
goto
from goto import *
import time
import sys
import os

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



exampin = input("Example Input: ")