好的,首先让我说我知道我使用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键时发生错误。
答案 0 :(得分:3)
goto.py
是April 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;时崩溃。
解决方案:确保您永远不会执行没有与之关联的现有文件的代码。避免使用eval
,input
,exec
以及评估文件外部代码的任何内容。请改用raw_input
。
答案 1 :(得分:0)
没有用例你绝对需要在Python中使用goto。在最坏的情况下,使用continuation并更加手动地跟踪您的状态。