편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2020.06.27

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


    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로 만들어져 있습니다.

  • 프로필 반시님의 편집
    날짜2020.06.27

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


    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로 만들어져 있습니다.