Строковые литералы 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)