msdd’s blog

deep learning勉強中。プログラム関連のこと書きます。

エディターのハイライトでバグの箇所がわからなかった

今日のバグ

cloud functionsを使っていて、pythonコードをデプロイしたが、SyntaxError: invalid syntaxが出た。

f:id:msdd:20200616205449p:plain

エラー内容を見ると、文字列の部分でエラーが出ていた。実際には、パスはもっと長いもの使っていた。

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"]という変数を埋め込んでいるのが、で 理解して、問題なく書けていると思い込んでいた。

f:id:msdd:20200616205733p:plain

しかし、このエディターのハイライトの色が実はおかしかった。 ""を使ったら、最初の"からyearの前の"までが文字列の色になり、year部分が白くなってから、残りの""内が文字列の色になって欲しかった。 fstringで書いていたためだと思われる。

思ってたものは、 文字列の前からfを取ったのと同じような感じに色を付けて欲しかった。 対応する"で囲まれた中身が文字列として色がついており、文字列でない部分のyearは白く表示される。これなら、間違っていることが一目でわかる。

f:id:msdd:20200616205742p:plain

おわりに

原因がわかれば、こんな事で時間を使ってしまったのかと思うようなエラーだった。 このことで、エディターのハイライト間違えられるすぐには気づかないことを知れた。