Я новичок в Python, и я работаю над написанием кода базы данных с использованием модуля cx_Oracle. В cx_Oracle документация есть такой пример кода:
import sys
import cx_Oracle
connection = cx_Oracle.Connection("user/pw@tns")
cursor = connection.cursor()
try:
cursor.execute("select 1 / 0 from dual")
except cx_Oracle.DatabaseError, exc:
error, = exc.args
print >> sys.stderr, "Oracle-Error-Code:", error.code
print >> sys.stderr, "Oracle-Error-Message:", error.message
Мой вопрос касается того, где создается объект «ошибка». Что делает ", ="? Я пробовал искать в документации Python, но поисковые системы не очень хорошо работают, когда вы ищете операторов. :-)
Я знаю, что exc.args - это одноэлементный кортеж, но я просто не понимаю синтаксиса ", =". Если я уберу запятую, я получаю сообщение об ошибке «AttributeError: 'tuple' object has no attribute 'code'».
Может ли кто-нибудь указать мне, где это задокументировано? Спасибо!
Обновлено:
Это работает без необходимости распаковывать кортеж:
import sys
import cx_Oracle
connection = cx_Oracle.Connection("user/pw@tns")
cursor = connection.cursor()
try:
cursor.execute("select 1 / 0 from dual")
except cx_Oracle.DatabaseError, exc:
print >> sys.stderr, "Oracle-Error-Code:", exc.args[0].code
print >> sys.stderr, "Oracle-Error-Message:", exc.args[0].message






http://www.python.org/doc/2.5.2/tut/node7.html
Ищите «последовательность распаковки» в разделе 5.3.
Запятая служит для распаковки кортежа, то есть извлекает единственный элемент кортежа и связывает его с error. Без запятой вы бы связали сам кортеж, а не его содержимое.
error, = exc.args
Это случай последовательность распаковки.
Более читаемый способ написать то же самое, и стиль, который я лично предпочитаю, это:
[error] = exc.args
Для понимания предыдущего примера необходимы два бита:
(foo,). В большинстве случаев скобки можно опустить. В частности, их можно не указывать рядом с оператором присваивания.