こんにちは、PyQサポートです。
今回はSyntaxError: f-string: unterminated string
というエラーの意味と、その解消方法を解説します。
f-stringsを使うとこのようなエラーになることがあります。早速、質問を見ていきましょう。
質問:SyntaxError: f-string: unterminated string というエラーはどういうものですか?
SyntaxError: f-string: unterminated string
というエラーが出ました。どのように直したら良いでしょうか?
入力した内容(コード)
python my_data = {"age": 20} print(f"I'm {my_data['age]} years old.")
出たエラー(実行結果)
Python 3.10 で実行した結果です。
File "/Users/pyq/my_data.py", line 3 print(f"I'm {my_data['age]} years old.") ^ SyntaxError: f-string: unterminated string
回答:f-stringの{}
の中で文字列が閉じてないことを表しています
f-stringsを使うと、文字列中の{}
内にPythonの式を記述できます。
この式は単に変数名のみを記述するだけでなく、もっと複雑な式も記述できます。
今回の場合は、my_data["age"]
の値を文字列に埋め込みたかったのでしょう。
これをf-stringsに埋め込むには、{my_data["age"]}
と書かねばなりません。
しかし文字列を表す"
は、すでにf""
のほうで使ってしまっているため、{}
の中では使えません。代わりに{}
の中では、{my_data['age']}
のように文字列に'
を使うことでこの問題を回避できます。
さてここで、エラーメッセージを確認してみましょう。
SyntaxError: f-string: unterminated string
SyntaxError
とあるので文法エラーです。
どのようなエラーか見てみると、f-string: unterminated string
とあります。これはf-stringsについて「文字列が終わっていない」ということを表しています。
コードのf-stringsの部分だけに注目してみましょう。
f"I'm {my_data['age]} years old."
f-strings自体は"
で囲んでいるので、問題なさそうです。
しかし、{}
の中をみると{my_data['age]}
となっており、キーとして指定した文字列age
が'
で閉じていません。そのため、「文字列が終わっていない」というエラーになってしまったのです。
{my_data['age']}
のように、きちんと文字列age
を'
で囲めば問題は解消します。
修正後のコードは以下のとおりです。
python my_data = {"age": 20} print(f"I'm {my_data['age']} years old.")
実行結果
I'm 20 years old.
f-stringsについては、他の記事でも解説しています。