goto模块中的错误[Python]

时间:2015-08-03 22:36:56

标签: python python-2.7

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

因此,现在让我解释一下我的问题(我在Linux上)。当我运行我的小程序时,它运行正常,直到我点击我的第一个字符串输入。输入字符串并按回车键后,它会给我这个错误:

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>'

我已经尝试重新安装模块,重新安装python,而且我不太确定 string 是否真的会被整合到goto.py中。

谢谢,
Cether

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

from goto import *
import time
import sys
import os

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



exampin = input("Example Input: ")

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

2 个答案:

答案 0 :(得分:3)

goto.pyApril Fool's Day joke。不要使用它。如果你认真使用它,你就不会认真对待Python。然而,来源非常简单,因此从纯粹的学术角度可以找出这种情况发生的原因。

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

但是,当运行input函数时,它会执行任意Python代码来评估字符串。这是一种愚蠢的行为,但这就是它的作用,它在Python 3中被改变为只返回一个字符串。在评估代码时,它会将其文件名视为<string>。此文件名不存在,因此当_trace函数看到代码时,它无法打开文件名并在&#34;调试&#34;时崩溃。

解决方案:确保您永远不会执行没有与之关联的现有文件的代码。避免使用evalinputexec以及评估文件外部代码的任何内容。请改用raw_input

答案 1 :(得分:0)

没有用例你绝对需要在Python中使用goto。在最坏的情况下,使用continuation并更加手动地跟踪您的状态。