В настоящее время я создаю язык программирования на Python 3.6 и по какой-то причине следующий код выдает IndexError: string index out of range
.
Когда я пытаюсь выполнить следующий код в пакетном файле Windows:
@echo off
python run-file.py test.ros
pause
Но я получаю следующий вывод:
Traceback (most recent call last):
File "run-file.py", line 16, in <module>
if not(value[1][0] == "!") and ignoreline == False:
IndexError: string index out of range
Press any key to continue . . .
Файл run-file.py
выглядит так:
from sys import argv as args
from sys import exit as quit
import syntax
try:
args[1]
except IndexError:
print("ERROR: No ROS Code file provided in execution arguments")
print("Ensure the execution code looks something like this: python run-file.py test.ros")
with open(args[1]) as f:
ignoreline = False
content = f.readlines()
content = [x.strip() for x in content]
for value in enumerate(content):
if not(value[1][0] == "!") and ignoreline == False:
firstpart = value[1].split(".")[0]
lenoffirstpart = len(value[1].split(".")[0])
afterpart = str(value[1][lenoffirstpart + 1:])
apwithcomma = afterpart.replace(".", "', '")
preprint = str(firstpart + "(" + apwithcomma + ")")
printtext = preprint.replace("(", "('")
lastprinttext = printtext.replace(")", "')")
try:
exec(str("syntax." + lastprinttext))
except Exception as e:
template = "ERROR: An error of type {0} occured while running line {1} because {2}"
message = template.format(
type(e).__name__, str(value[0] + 1), str(e.args[0]))
print(message)
quit(1)
elif content[value[0]][0] == "!!!":
ignoreline = not(ignoreline)
quit(0)
Файл syntax.py
выглядит следующим образомэто:
def print_message(contents=''):
print(contents)
Файл test.ros
выглядит следующим образом:
! This is a single line comment
!!!
This line should be ignored
and this one as well
!!!
print_message.Hello World
Похоже, что проблема в строке 16 файла run-file.py
:
if not(value[1][0] == "!") and ignoreline == False:
Я уже пытался заменить value[1][0]
на (value[1])[0]
и другие комбинации скобками, но безрезультатно.
Кажется, что когда я пытаюсь напечатать значение, оно ведет себя как ожидалось и дает мне !
, который является первым символом файла test.ros
, но по какой-то причине он выдает исключение, когда он находится вif
Statement.
Если вы хотите больше источника, он находится на Github, и вы можете найти точный коммит, содержащий все файлы здесь
Обновление / Решение
Большое спасибо Иданмель и Клаус Д. за помощь в решении моей проблемы.Вы можете просмотреть сделанные мной изменения здесь