2008-11-14 2 views
1

파이썬 예외는 여러 줄에 걸쳐 코드 예에 의해 발생하는 경우 :파이썬 예외 백 트레이스는 어디에서 라인이 끝나는 지 알려줍니다.

myfoos = [foo("bar", 
       "baz", 
       "quux", 
       i) for i in range(10)] 

파이썬은 마지막 줄의 줄 번호를보고하고 그 라인의 코드 조각이 표시됩니다 :

Traceback (most recent call last): 
    File "test.py", line 4, in <module> 
    i) for i in range(10)] 
NameError: name 'foo' is not defined 

첫 번째 줄을 확인하는 방법이 있습니까? 나는 '하지만

Traceback (most recent call last): 
File "test.py", lines 1-4 in <module> 
    myfoos = [foo("bar", 
       "baz", 
       "quux", 
       i) for i in range(10)] 
NameError: name 'foo' is not defined 

답변

0

을 시도에서/블록을 제외하고 당신이 나가서 설명하자면 NameError를 제외하고는 NameError.lineno 설정을 시도 할 수 있습니다,이 대신 같은 것을보고 할 수 있도록 traceback 객체를 예외를 catch하고 조작 할 수있는 방법이 있습니까 만약에 이것이 어떻게 작동하는지 정확히 알 수는 없지만, 내가 찾은 최선의 결과는 이처럼 있습니다.

try: 
    somecode 
except NameError 
    NameError.lineno = [1,4] 

오류를 제기하는 진술뿐만 아니라 진술이 시작되고 끝나는 위치를 파악해야합니다.

희망이 있습니다.

+0

내가 말하고있는 부분은 문장이 시작하고 끝나는 때를 알아내는 것입니다. –

2

라인의 시작 부분을 찾는 것이 정말 어려울 것입니다. 파이썬을 구문 분석하거나 컴파일 된 바이트 코드를 파헤쳐 야합니다. Python을 파싱하기위한 표준 라이브러리에는 모듈이 있지만, 출력 결과를 해석하는 것이 흑인 예술이라는 것을 경험을 통해 알 수 있습니다. 그리고 컴파일 된 바이트 코드가 대답을 가지고 있는지 확실하지 않습니다 ...

관련 문제