본문 바로가기

전체 글68

파라메터를 정의하는 새로운 방법 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.
Intent로 메일 보내기 안드로이드에선 Intent를 사용해 다른 앱으로 데이터를 전달하며 앱을 실행한다. 구글에서 필수적인 Intent의 구조는 미리 정의를 해뒀는데, 메일 보내는 것도 그 중 하나이다. developer.android.com/reference/android/content/Intent Intent | Android 개발자 | Android Developers developer.android.com 첨부파일 없이 메일을 보낼 땐 아래와 같이 보내면 된다. 메일 앱이 실행된다. val uri = Uri.parse("mailto:no-reply@mail.com") val intent = Intent(Intent.ACTION_SENDTO, uri) intent.putExtra(Intent.EXTRA_SUBJECT, ".. 2020. 12. 3.