ParseError: Неверный синтаксис ASN.1 в строке 1, столбец 1: '>! <"': Ожидаемая ссылка на модуль - PullRequest
0 голосов
/ 03 июля 2019

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

ParseError: Неверный синтаксис ASN.1 в строке 1, столбец 1: '>! <"': Ожидаемая ссылка на модуль. </p>

from __future__ import print_function
from binascii import hexlify
import asn1tools

specification=""""
Foo DEFINITIONS ::= BEGIN

    Question ::= SEQUENCE {
        id        INTEGER,
        question  IA5String
    }

    Answer ::= SEQUENCE {
        id        INTEGER,
        answer    BOOLEAN
    }

END
""""


Foo = asn1tools.compile_string(specification, 'uper')

Question = {'id': 2, 'question': u'Hi how r u?!'}
Answer ={'id': 2, 'answer': u'Hi i am good'}
encoded = Foo.encode('Question', Question)
encoded1 = Foo.encode('Answer', Answer)
decoded = Foo.decode('Question', Question)

print('Question:', Question)
print('Encoded:', hexlify(encoded).decode('ascii'))
print('Decoded:', decoded)

Ответы [ 2 ]

0 голосов
/ 17 июля 2019

Строковые литералы Python заключены не в четыре кавычки, а в три.

Вы можете видеть, что это неправильно, по выделению синтаксиса в вашем вопросе.

Моя установка Python полностью отклоняет ваш код. Когда я устанавливаю закрывающий разделитель в три кавычки (но оставляю разделитель как есть), я получаю сообщение о проблеме, о которой вы сообщили. (Пожалуйста, оставьте свой код дословно в следующий раз.)

Когда я исправляю оба, я получаю новую ошибку:

asn1tools.codecs.EncodeError: answer: Ожидаемые данные типа bool, но получили Привет, я в порядке.

Это потому, что вы пытаетесь использовать строку английского языка как логическое значение; должно быть:

Answer ={'id': 2, 'answer': True}

Наконец, декодирование завершается неудачно, потому что вы передаете неправильный аргумент Foo.decode; должно быть:

decoded = Foo.decode('Question', encoded)

Теперь это работает.


from __future__ import print_function
from binascii import hexlify
import asn1tools

specification="""
Foo DEFINITIONS ::= BEGIN

    Question ::= SEQUENCE {
        id        INTEGER,
        question  IA5String
    }

    Answer ::= SEQUENCE {
        id        INTEGER,
        answer    BOOLEAN
    }

END
"""


Foo = asn1tools.compile_string(specification, 'uper')

Question = {'id': 2, 'question': u'Hi how r u?!'}
Answer ={'id': 2, 'answer': True}
encoded = Foo.encode('Question', Question)
encoded1 = Foo.encode('Answer', Answer)
decoded = Foo.decode('Question', encoded)

print('Question:', Question)
print('Encoded:', hexlify(encoded).decode('ascii'))
print('Decoded:', decoded)
0 голосов
/ 09 июля 2019

Ваша схема ASN.1 выглядит правильно. Вы можете проверить синтаксис на asn1.io . Поскольку сообщается, что ошибка является первым символом (строка 1, столбец 1), это может быть дополнительная кавычка или какой-либо другой символ, который вставляется при подготовке спецификации.

...