エディターのハイライトでバグの箇所がわからなかった
今日のバグ
cloud functionsを使っていて、pythonコードをデプロイしたが、SyntaxError: invalid syntax
が出た。
エラー内容を見ると、文字列の部分でエラーが出ていた。実際には、パスはもっと長いもの使っていた。
ret=f"public/data/{params["year"]}/" ^
間違ってないのになぁと思って、ずっとエラー原因探してた。 cloud functionsのエラー見てみると、最初の部分についているので、 前の行がおかしいのかなと思って調べてみたり、 変数が間違っているのかなと思い、パスを削って上のような ものにして実行した。しかし、まだエラー出た。
cloud functionsのデバッグ方法とかわからないので、 ずっとデプロイし続けてたが、ずっとエラー出るので、 さすがにデプロイして実行するの面倒くさくなった。 ローカルでデバッグしようと思い、少し修正してanacondaでファイルを実行した。 すると、cloud functionsと同じ行だが矢印が違う位置を指していた。
ret=f"public/data/{params["year"]}/" ^
ここで、やっとエラー原因に気づいた。文字列なので""で囲むが、辞書型のparams["year"]のように、変数でも""を使っていて、その文字列の中で、""を再び使っていた事が原因だった。""が2つあることで、対応する""が自分の予想と違うことになっていた。
解決法は、'year'のように'で囲うことで解決した。
気づけなかった原因
なんで気づけなかったのかと思い、エディターを見てみると、 下の画像のようになっていた。 エディターのハイライトの色から見たら、コードが間違っていないように思えた。 文字列があり、その中にparams["year"]という変数を埋め込んでいるのが、色で 理解して、問題なく書けていると思い込んでいた。
しかし、このエディターのハイライトの色が実はおかしかった。 ""を使ったら、最初の"からyearの前の"までが文字列の色になり、year部分が白くなってから、残りの""内が文字列の色になって欲しかった。 fstringで書いていたためだと思われる。
思ってたものは、
文字列の前からf
を取ったのと同じような感じに色を付けて欲しかった。
対応する"で囲まれた中身が文字列として色がついており、文字列でない部分のyearは白く表示される。これなら、間違っていることが一目でわかる。
おわりに
原因がわかれば、こんな事で時間を使ってしまったのかと思うようなエラーだった。 このことで、エディターのハイライト間違えられるすぐには気づかないことを知れた。