У меня есть следующий тест для функции, которая может принимать только текст Unicode в Python 2.x
def testNonUnicodeInput(self):
""" Test falure on non-unicode input. """
input = "foo".encode('utf-16')
self.assertRaises(UnicodeDecodeError, myfunction, input)
Однако этот тест не пройден при запуске в Python 3.x. Я получаю:
AssertionError: UnicodeDecodeError not raised by myfunction
Я пытаюсь выяснить, как настроить тест, который будет продолжать работать в Python 2.x, но также будет работать после запуска через 2to3 в Python 3.x.
Вероятно, я должен заметить, что я выполняю в своей функции следующее, чтобы принудительно использовать Unicode:
def myfunction(input):
""" myfunction only accepts unicode input. """
...
try:
source = unicode(source)
except UnicodeDecodeError, e:
# Customise error message while maintaining original trackback
e.reason += '. -- Note: Myfunction only accepts unicode input!'
raise
...
Конечно, это (вместе с тестом) проходит через 2to3 до запуска на Python 3.x. Я предполагаю, что на самом деле я хочу, чтобы в Python 3 не принимались строки байтов, что я и делал, сначала кодируя строку. Я не использовал utf-8 в качестве кодировки, потому что я понимаю, что это значение по умолчанию.
У кого-нибудь есть идеи по поводу согласованности здесь?