2016-02-23 3 views
0

Я пытаюсь запрограммировать цикл со словарем штрих-кодов, подключенным к сканеру с малиновым pi, и он позволяет только определенным номерам помещаться в словарь. Пример кода не работает это:Python Invalid Token

variable = dict() 
variable[0425872013] = 200 

while True: 

    print('ready to scan next item') 
    buffer = input('->') 

print(variable[buffer]) 

Он продолжает выскакивать как недопустимый знак с переменным числом. Я попытался помещать их в строки и не регистрирует их, когда штрих-код вводит номер.

+1

Прежде всего, вам нужно улучшить форматирование своего сообщения. Во-вторых, не могли бы вы объяснить, почему он не работает? У вас есть какой-либо стек или вывод, который вы могли бы разместить? В противном случае вам будет сложно помочь. – Demitrian

+1

* Как это не работает? Вы получили сообщение об ошибке? Результат, который вы ожидаете? –

+0

Это Python 2 или Python 3? – jwodder

ответ

1

Вы назначаете ключи как целые, но вы указываете ключи как строку. Попробуйте это:

print(variable[int(buffer)]) 
0

Обратите внимание, что здесь вы установили ключ как целое. Если вы используете Python 2, вы должны ввести raw_input(), что делает его строкой.

Если это Python 3, а input() правильный, вы по-прежнему получаете строку, а не целое число.

вход ([подсказка])

Если приглашение аргумент присутствует, то он записывается в стандартный вывод без завершающего символа новой строки. Затем функция считывает строку из ввода , преобразует ее в строку (зачищая конечную новую строку) и возвращает это.

Вы должны либо сделать ключи строку '0425872013' или преобразовать входной буфер в целое число (проверяя, что он является действительной записью целого) myinput = int(raw_input())

Обратите внимание, что целое значение 045 является незаконным в Python 3, поскольку Python 2 рассматривал его как восьмеричное значение (0o45 в Python 3).

+1

Обратите внимание, что он может использовать Python 3, и в этом случае 'input' является правильным. – glibdud

+0

Я попытался сделать клавиши строкой, и сканер не вводит в качестве строки, чтобы она не читала правильно? – Microwave

+0

@ Микроволновый вход (в Python 3) вводит строку. Выдайте тип (буфер), например, когда я прочитал его в Python 2.7, type (buffer) дает . Вам нужно проверить, что вы получаете, и сделать ключи одинаковыми. В качестве альтернативы, сделайте ключи целыми числами и используйте 'buffer = int (input ('>'))' Однако в этом случае установите для исключения, если считывается неинтегрированное значение. – sabbahillel

0

Вам необходимо поместить штрих-коды в виде строк в словарь и использовать raw_input() вместо input(). Недопустимая ошибка токена исходит из литерала числа, потому что ведущий ноль позволяет Python анализировать это как восьмеричное число, а не десятичное, а число содержит цифры, которые не допускаются в восьмеричных числах.