“Слишком много значений для распаковки” Исключения

FreeTDS + unixODBC или Установка iODBC

первый FreeTDS, затем настройте один из двух механизмов ODBC для использования FreeTDS в качестве его драйвера ODBC. Тогда используйте интерфейс командной строки механизма ODBC.

unixODBC имеет isql, iODBC имеет iodbctest

, можно также использовать любимый язык программирования (я успешно использовал Perl, C, Python и Ruby для соединения с MSSQL)

, я лично использую FreeTDS + iODBC:

$more /etc/freetds/freetds.conf
[10.0.1.251]
    host = 10.0.1.251
    port = 1433
    tds version = 8.0

$ more /etc/odbc.ini
[ACCT]
Driver = /usr/local/freetds/lib/libtdsodbc.so
Description = ODBC to SQLServer via FreeTDS
Trace = No
Servername = 10.0.1.251
Database = accounts_ver8

106
задан Alfred Myers 25 September 2009 в 22:56
поделиться

5 ответов

Это исключение означает, что вы пытаетесь распаковать кортеж, но в кортеже слишком много значений по отношению к количеству целевых переменных. Например: эта работа и печатает 1, затем 2, затем 3

def returnATupleWithThreeValues():
    return (1,2,3)
a,b,c = returnATupleWithThreeValues()
print a
print b
print c

Но это вызывает вашу ошибку

def returnATupleWithThreeValues():
    return (1,2,3)
a,b = returnATupleWithThreeValues()
print a
print b

вызывает

Traceback (most recent call last):
  File "c.py", line 3, in ?
    a,b = returnATupleWithThreeValues()
ValueError: too many values to unpack

Теперь, почему это происходит в вашем случае, я не знаю, но, возможно, это ответ укажет вам верное направление.

175
ответ дан 24 November 2019 в 03:50
поделиться

Это происходит со мной, когда я использую Jinja2 для шаблонов. Проблему можно решить, запустив сервер разработки с помощью команды runserver_plus из django_extensions .

Он использует отладчик werkzeug , который также оказывается намного лучше и имеет очень красивую интерактивную консоль отладки. Он творит некоторую магию ajax для запуска оболочки python в любом кадре (в стеке вызовов), чтобы вы могли отлаживать.

0
ответ дан 24 November 2019 в 03:50
поделиться

Скорее всего, где-то в вызове get_profile () есть ошибка. На ваш взгляд, прежде чем вы вернете объект запроса, поместите эту строку:

request.user.get_profile()

Это должно вызвать ошибку и дать вам более подробную трассировку, которую вы затем можете использовать для дальнейшей отладки.

0
ответ дан 24 November 2019 в 03:50
поделиться

Эта проблема выглядела знакомой, поэтому я подумал, что посмотрю, смогу ли я воспроизвести ограниченный объем информации.

Быстрый поиск обнаружил запись в блоге Джеймса Беннета здесь , в котором упоминается, что при работе с UserProfile для расширения модели User обычная ошибка в settings.py может привести к тому, что Django выдаст эту ошибку.

Процитируем запись в блоге:

Значение параметра - не «appname.models.modelname», а просто «appname.modelname». Причина в том, что Django не использует это для прямого импорта; вместо этого он использует внутреннюю функцию загрузки модели, которой требуется только имя приложения и имя модели. Попытка сделать что-то вроде "appname.models.modelname" или "projectname.appname.models.modelname"

8
ответ дан 24 November 2019 в 03:50
поделиться

попробуйте распаковать в одной переменной,

python обработает его как список,

затем распакует из списка

def returnATupleWithThreeValues():
    return (1,2,3)
a = returnATupleWithThreeValues() # a is a list (1,2,3)
print a[0] # list[0] = 1
print a[1] # list[1] = 2
print a[2] # list[2] = 3
17
ответ дан 24 November 2019 в 03:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: