2013-05-19 2 views
1

파일에서 정보를 읽는 코드 (점, 다각형, 선 및 원을 묘사하는 선)를 클래스에 따라 파싱합니다. 점은 x와 7 좌표를 가지며 선은 시작점과 끝점을가집니다.Python : ValueError : 밑이 10 인 'int'에 대한 리터럴이 잘못되었습니다. ''오류

나는 목록 (line = ['L1','L((1,1), (1,2))','# comment'])을 가지고 있으며 그것을 줄에 넣으려고합니다. 문제는 끝점을 만드는 것입니다. 실행시 다음 오류가 발생합니다.

무엇이 문제입니까?

코드 :

def make_line(line): 
     name = line[0] 
     point = line[1].split(", ") 
     p = point[0].split(",") 
     x1 = int(p[0][3:]) 
     y1 = int(p[1][:-1]) 
     point1 = Point(x1,y1) 
     p = point[1].split(",") 
     x2 = int(p[0][1:]) 
     y2 = int(p[1][:-2]) 
     point2 = Point(x2,y2) 
     line = Line(point1,point2) 
     shapes[name] = line 
+0

'p [0] [1 :]'을 출력하여보십시오. 제 견해는 놀랄 것입니다. –

+0

표준 라이브러리의 일부입니까? 어떤 모듈을'Point'와'Line'으로부터 얻을 수 있습니까? 반대로 – mrKelley

+0

! '1'을 출력하지만 에러가 발생했을 때'int()'를 캐스팅 할 때 출력합니다. @mrKelley, 그 자체로 쓰여진 클래스들입니다 – Helena

답변

6

하면 오류 메시지가 당신이 int로 빈 문자열을 변환하려고했다. 이를 확인하기 위해 변환을 수행하기 직전에 모든 데이터를 다시 확인하십시오.

데이터가 정확하면 정수로 변환 할 수 있다는 것은 확실합니다. 따라서 그려지는 유일한 결론은 귀하의 데이터가 부정확하다는 것입니다. 귀하는 귀하의 질문에 데이터가 훌륭하다고 주장하지만, 이는 사실 일 수 없습니다.

당신의 가정하에 파이썬 인터프리터를 신뢰하십시오.

+0

모든 것을 재확인했지만 실수를 찾을 수 없어서 코드를 테스트했지만 그 결함이있는 함수는 피할 수있었습니다. 함수에 공급 된 줄은 파일에서 읽습니다. 어떤 시점에서 나는 중간에 대신 파일의 끝 부분에 그 줄을 넣고 작동시킨다. "마법의 신비 버그 수정"바로 거기에 – Helena

0

오류는 코드에 문제가 있음을 나타내지 만 사실 제대로 실행됩니다. 오류가 발생하는 경우, 발생하는 행을 찾아 내고 print을 사용하여 값을 인쇄하여 올바른 값을 올바른 방법으로 전달하는지 확인하십시오.

이 재미있는 형식을 다루는 쉬운 방법은 파이썬의 eval() 함수를 사용하는 것입니다. 목록의 두 번째 부분은 두 세트의 세트와 매우 비슷하게 보입니다. 실제로는 두 번째 세트와 같습니다.

eval("((1,1), (1,2))") 
# equivalent to this: 
eval(line[1][1:],{}) # passing an empty dict as the 2nd argument makes eval a (bit) safer 

을하지만 그냥 신속하고 더러운 방법이며, 생산 코드에 사용해서는 안됩니다 : 이렇게하면

, 당신은 좋은 세트 개체를 얻을 수 있습니다.

+2

게시 된 코드는 정확한 결과를 제공하므로 답변이 틀립니다.구문 분석을 위해'eval'을 추천하는 것은 끔찍한 조언입니다. – interjay

+0

'eval()'은 좋은 습관이 아니라는 것을 알고 있었지만, 빠르고 쉽게 사용할 수있는 방법을 보여주고있었습니다. 네가 맞다면 그 단점을 더 분명하게해야했다. 게시물 업데이트 – Patrick

0

충분한 정보를 제공하지 못했던 부분을 제거했지만 여전히 동일한 오류가 발생하지 않습니다.

def make_line(line): 
    name = line[0] 
    point = line[1].split(", ") 
    p = point[0].split(",") 
    x1 = int(p[0][3:]) 
    y1 = int(p[1][:-1]) 
    p = point[1].split(",") 
    x2 = int(p[0][1:]) 
    y2 = int(p[1][:-2]) 
    return x1, y1, x2, y2 

>>> make_line(['L1','L((1,2), (1,1))','# comment']) 
(1, 2, 1, 1) 
관련 문제