LoginSignup
0
0

Azure Functionsで関数を作るときにprintデバッグをしてはいけない小学校校歌(Pythonの話)

Posted at

知っている人には何を今更な話なのですが、初心者がAzure Functionsを使って、FastAPIでAPIを初めて立てた経験談の一つです。

cp932' codec can't encode character のようなエラーが出たらprint文を疑え

Azure FunctionsにFastAPIを使った関数をデプロイしようとするとき、Azure Functions Core Toolsを入れて、まずはローカルで func startして動かすと思います。FastAPIを普通にローカルで動かす場合は uvicorn main:app --reload を使うことが多いと思いますが、func startで動かしてみると、uvicornの時には出なかったエラーが出るようになります。

その代表例が、cp932' codec can't encode character というエラーです。

これはどういうことかというと、Azure Functions Core Toolsの環境下では、コンソールの文字コードはcp932というものになっています。これはUTF-8とは違う文字コードで、例えば絵文字などは表示出来ません。なのに、絵文字が出てくると、このエラーが出て「取り扱えない文字が入っているんだけど!」と怒られることになります。

私はFastAPIからOpenAI APIを呼び出す関数を作っていたのですが、OpenAIからの返事には当然絵文字などが含まれることがあり、それをprint(openai_response)のような形でprintデバッグしていたから発生したエラーでした。

printをやめてloggingを使うようにしたら、出なくなりました。

uvicornを使っていたときは、手元の環境のコンソール(私の場合はWindows11のPowerShell 7)の文字コードが適用されるので、uvicornでは出なかったエラーがfunc startでは出るようになったということ……と理解しました。

printデバッグからの卒業

初心者が一番はじめに覚えるのはprint()だと思うので、処理を追うのにどうしてもprintを使ってしまいがちだと思います。私もずっとそうでした。この機会に、import loggingしてloggingを使うようにすることにしました。

ちなみにこのことは、ChatGPTに聞いたら教えてくれました。ChatGPT、本当に頼りになる…!

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0