Вопрос

Я новичок в 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
Это было полезно?

Решение

error, = exc.args

Это случай распаковка последовательности.

Более читабельный способ написать то же самое и стиль, который лично мне нравится:

[error] = exc.args

Для понимания предыдущего примера необходимы два бита:

  1. Когда левая часть присваивания представляет собой рекурсивную последовательность имен, значение правой части должно быть последовательностью одинаковой длины, и каждый элемент значения RHS присваивается соответствующему имени в LHS.
  2. Написан кортеж из одного элемента в Python (foo,).В большинстве контекстов скобки можно опустить.В частности, их можно опустить рядом с оператором присваивания.

Другие советы

http://www.python.org/doc/2.5.2/tut/node7.html

Найдите «распаковку последовательности» в разделе 5.3.

Запятая служит для распаковки кортежа, т.е.он извлекает единственный элемент кортежа и привязывает его к error.Без запятой вы бы связали сам кортеж, а не его содержимое.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top