네트워크로 받아오는 데이터 처리상에 문제 (python)

조회수 617회

server에서 실시간으로 임의의 값들을 보내는데

socket.send(str([[0,0,1,0,0],[1,0,0,0,0],[0,1,0,0,0]]).encode())

이런 형식으로 보냅니다. 이 데이터를 client에서 받아서 0이면 OFF, 1이면 ON으로 처리하려고 하는데, (처리는 list[0]에 해당하는 값으로 OFF,OFF,ON,OFF,OFF / list[1]은 ON,OFF,OFF,OFF 이렇게 client에서 분류합니다.)

client에서 받아지는 건 잘 받아집니다.

문제는, client는 PyQt5로 만들어 져 있는데, (화면이 좀 많습니다. 약 30개 정도 뭐 그렇다고 한 번에 다 키는건 아닙니다.) client에서 받을 때 정말 간혹 약 1시간에 1번 꼴로

<>:1: SyntaxWarning: list indices must be integers or slices, not tuple; perhaps you missed a comma? <>:1: SyntaxWarning: list indices must be integers or slices, not tuple; perhaps you missed a comma? :1: SyntaxWarning: list indices must be integers or slices, not tuple; perhaps you missed a comma?

이런 에러가 뜹니다.

더 큰 문제는 이게 왜 뜨는지는 알았는데 해결하는 방법을 모르겠습니다.

이 에러는

Data = [[1,2,3,4],[5,6,7,8]][[1,2,3,4],[5,6,7,8]]

이렇게 하면 나오는데, list가 ,없이 들어가서 생기는 문제인것 같습니다. (에러 문구에도 comma가 나오죠..)

저는 이렇게 생각을 해 보았습니다.

  1. 콤마가 없다는 것은 server에서 너무 빨리 보내서 두 개가 들어온 것으로 처리가 되는 것인지.
  2. 혹은 client에서 받아놓고 Data에 값을 넣는 과정이 느려져서 그 사이에 받아온 데이터 까지 같이 처리가 되는 것인지...

신기한 것은 위 처럼 코딩을 하면 에러가 나서 진행을 못 하는데 try - except로 감싸면 에러 문구는 뜨는데 이후 코딩을 진행할 수 있습니다.

try - except로 감싸고 난 Data를 확인하면 tuple로 자동으로 들어가 있는데....

try - except를 사용하지 않고 tuple로 만들어 버릴 수 있는 것 혹은 Data에 콤마 없이 리스트가 받아지지 않게 하는 것 중에 해법이 존재할지 궁금합니다.

p.s. server에서 무한루프 돌듯이 계속 데이터를 send합니다. (1초에 약 20번? 정도 보내는 것 같더군요), server도 PyQt5로 만들어져 있습니다.

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기
    [[1,2,3,4],[5,6,7,8]][[1,2,3,4],[5,6,7,8]]
    

    이것은 list 가 아닙니다. 꼭 list 두개가 나란히 있는 듯 보이는 것이지 python 에서 list 는 [ ] 시작과 끝으로 되어야 합니다.

    예외처리를 했으니 에러건은 무시되고 다음 것이 진행되겠지요.

    벨리데이션 하는 코드를 만들어 넣던지 데코레이터를 이용해서 기존 코드 손안대고 벨리데이션 코드 추가하는방법도 있습니다.

    • 그 validation을 저는 주로 type(Data) 이렇게 확인 하고 조건문으로 분기하는데... 해당 list두 개는 아무 type이 아닌 것이잖아요? 그러면 validation을 어떻게 하는 것이 좋을지 궁금합니다. 조건문에 쓰고자 해도 애초에 변수에 담겨져야 하는데 담겨지지가 않아서 아예 비교자체가 안됩니다... 반시 2020.6.27 18:01
    • [[1,2,3,4],[5,6,7,8]][[1,2,3,4],[5,6,7,8]] 이렇게 문자열로 받는다는 이야기 아닌가요? 그럼 판단을 해야죠 보정을 할 것인가. 버릴것인가. 버리는 부분은 간단합니다. eval(문자열) 을 수행하여 정상 list 면 변수로 받고 아니면 예외처리를 해주면 됩니다. 정영훈 2020.6.27 18:20

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)