문제

나는 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

내 질문은 "오류"객체가 생성되는 위치와 관련이 있습니다. "무엇을" ", ="그렇습니까? 나는 파이썬 문서 검색을 시도했지만 운영자를 검색 할 때 검색 엔진이 잘 작동하지 않습니다. :-)

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. 파이썬의 한 항목 튜플이 작성되었습니다 (foo,). 대부분의 상황에서 괄호는 헌신 할 수 있습니다. 특히 과제 연산자 옆에서 생략 할 수 있습니다.

다른 팁

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

섹션 5.3에서 "시퀀스 풀기"를 찾으십시오.

쉼표는 튜플을 풀고, 즉 튜플의 단일 항목을 추출하고,이를 바인딩하는 역할을합니다. error. 쉼표가 없으면 내용보다는 튜플 자체를 묶을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top