2017-02-13 9 views
1

Я работаю с модулем kinterbasdb, и модуль имеет эту функцию, называемую fetchone, которая возвращает результат выполнения запроса:Получить первый элемент возврата значения функции

cursor.execute("....") 
cursor.fetchone() 

Это возвращает кортеж: ("value1",), и я хочу получить доступ к первому элементу, но в конце концов избегаю [0], так как не говорит много, это волшебное число. Является ли это возможным? Может быть, некоторые встроенные функции?

Я пытался с:

value, _ = cursor.fetchone() 

Но это возвращается: ValueError: need more than 1 value to unpack, так как индекс 1 не имеет ничего.

+0

Какая версия Python? Работает ли значение 'value, * _ = ...'? В этом случае я не считал бы 0 магическим числом. – jonrsharpe

ответ

5

Проблема:

value, _ = cursor.fetchone() 
# ^a variable with identifier _ 

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

value, = cursor.fetchone() 
# ^no variable 

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

или в случае, если количество элементов в кортеже неизвестно (но больше нуля), вы можете использовать aterisk:

value, *_ = cursor.fetchone() 

который будет распаковывать остальные элементы кортежа _. В случае, если выражение имеет кортеж с одним элементом, _ будет равно _ ==() (кортеж без элементов). Если вы распакуете, например, (1,4,2,5), это приведет к value == 1 и _ == (4,2,5).

+1

Спасибо за ваш ответ. Я учусь от этого :-) –