2015-08-03 3 views
-2

Хорошо, позвольте мне начать с того, что я знаю, что плохо, что я использую модуль goto, и я не должен быть и blah blah blah. Однако для этой конкретной цели мне это нужно. Позвольте мне также сказать, что я новичок в Python, поэтому старайтесь избегать сложных ответов, спасибо!Ошибка в модуле 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>' 

Я попытался переустановить модуль, переустановка питона, и я не слишком уверен, что строка будет действительно включен в Гото .py в любом случае.

Спасибо,
Cether

EDIT: В соответствии с просьбой, вот код, который приводит к возникновению проблемы:

from goto import * 
import time 
import sys 
import os 

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



exampin = input("Example Input: ") 

ошибка происходит, когда я нажимаю войти после того как я войти в строка в этом вводе.

+4

Просьба указать код, который ведет к ошибке. – wallyk

+7

«Я новичок в python, поэтому я использую goto», имеет примерно такое же значение, как «Я новичок в python, поэтому я использую eval». Я бы посоветовал узнать язык до того, как вы начнете вытягивать такие вещи: P – NightShadeQueen

+0

@NightShadeQueen goto - это модуль, который почти не требует знания питона. Если вы не знакомы с модулем, он может быть расположен здесь: [link] (http://entrian.com/goto/) – Cether

ответ

3

goto.py является April Fool's Day joke. Никогда не используйте его. Если вы серьезно относитесь к этому, вы серьезно не используете Python. Однако источник довольно прост, поэтому можно узнать, почему это происходит, с чисто академической точки зрения.

goto.py:284 содержит строку sys.settrace(_trace). Функция sys.settrace предназначена для использования отладчиками и в основном «ловит» каждую строку Python до ее фактического выполнения для создания этих псевдосинтаксисов. Функция _trace, определенная в строке 251, предполагает, что каждая строка кода, которая должна быть выполнена, имеет связанное имя файла, и это имя файла может быть открыто.

Однако, когда функция input запущена, она выполняет произвольный код Python для оценки строки. Это глупое поведение, но это то, что он делает, и он был изменен в Python 3, чтобы возвращать только строку. Когда код оценивается, он считает его имя файла <string>. Это имя файла не существует, поэтому, когда функция _trace видит код, он не может открыть имя файла и сбой во время «отладки».

Решение: убедитесь, что вы никогда не выполняете код, у которого нет связанного с ним файла. Избегайте eval, input, exec и все, что оценивает код за пределами файла. Вместо этого используйте raw_input.

+0

Это была моя проблема. Благодарю. – Cether

+1

@Cether Как обычно, слово предупреждения: не используйте 'goto'. Почти каждая ситуация, в которой 'goto' имеет смысл в C, может быть заменена петлями, функциями и исключениями. Из любопытства, почему вы честно нуждаетесь в «гото» в первую очередь? – Kupiakos

0

Существует не вариант использования, где вам абсолютно необходимо перейти в Python. В худшем случае используйте continuation и отслеживайте свое состояние вручную.

Смежные вопросы