본문 바로가기

개발/파이썬18

파라메터를 정의하는 새로운 방법 3.8에 함수 파라메터를 정의하는 재밌는 방법이 추가됐다. '/'로 구분하면 그 뒤는 순서대로 넘기거나 키워드로 넘길 수 있다. def func(posonly1, posonly2, /, positional_or_keyword): ... 예) def func1(p1, p2, /, p3, p4): print(p1, p2, p3, p4) func1(1, 2, 3, 4) func1(1, 2, p3=3, p4=4) 3.7에서도 비슷한 방법이 있었는데, '*'로 구분해 그 뒤는 무조건 키워드로 넘겨야한다. def func(arg, *, kw_only1, kw_only2): ... 예) def func2(p1, p2, *, p3, p4): print(p1, p2, p3, p4) # func2(1, 2, 3, 4) 2020. 12. 7.
Flask-restx와 webargs에서 TypeError 처리 webargs로 파싱을 하다 필드가 없거나 없어야 하는 필드가 넘어오거나 타입이 안맞거나 아무튼 문제가 있으면 abort로 예외를 보낸다. 이 경우 기본은 402 응답이 와야하는데 이상하게 아래와 같이 500이 와서 로그를 보니 TypeError: Object of type GeneratedSchema is not JSON serializable 어떤 부분이 문제인지 조금 더 찾아보니 handle_error로 넘어오는 schema를 abort로 넘기고 있다. 스키마를 결과에 보여주고 싶었나? FlaskParser를 제외한 다른 파서들에선 안넘기는데 실수인가 싶기도 하고...실수면 많은 사람들이 알아야하는데 검색해도 안나오는 것을 보면 내쪽이 뭘 잘못했나 싶기도 하고. 아무튼 그 부분이 문제라 아래와 같이.. 2020. 12. 7.
문자열을 결합하는 몇가지 방법 방법 1 s = 'message1' s += 'message2' s += 'message3' 이해하기 쉽고 작성하기도 편해서 보통 이렇게 사용하지만 문자열은 immutable이라 매번 새로운 문자열이 생성되어 비효율적이다. (물론 대부분의 경우엔 별 문제가 안된다.) 방법 2 그래서 list에 문자열을 넣어준 후 join으로 한 번에 새로운 문자열을 생성한다. message_list = [] message.append('message1') message.append('message2') message.append('message3') s = ''.join(message_list) 방법 3 StringIO를 사용하는 방법도 있다. 이 경우 방법2보다 더 효율이 좋다. 게다가 tell()로 생성할 문자열의 .. 2020. 12. 3.
print로 개행 없이 출력 python2에선 print 'message', 처럼 마지막에 콤마를 붙여 개행 없이 출력할 수 있었다. python3에선 print('message', end='') 와 같이 end를 직접 지정해서 출력할 수 있다. 그리고 ,를 이용해 여러개를 출력할 때, 스페이스가 아닌 다른 문자를 sep로 지정할 수 있다. print('a', 'b', 'c', sep='-') # a-b-c 끝. 2020. 2. 7.