Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

入門 Python3の練習問題10.6 NameErrorについて

Q&A

Closed

解決したいこと

入門 Python3の練習問題の10.6において、写経したにもかかわらず出るエラーを回避したい。

発生している問題・エラー

NameError: name 'name' is not defined

該当するソースコード

el_dict={"name":"Hydrogen","symbol":"H","number":1}
hydrogen=Element(**el_dict)
class Element:
    def __init__(self, name, symbol, number):
        self.name=name
        self.symbol=symbol
        self.number=number
    def dump(self):
        print(f'{name=},{symbol=},{number=}')

hydrogen=Element(**el_dict)
hydrogen.dump()

自分で試したこと

class Element:
    def __init__(self, name, symbol, number):
        self.name=name
        self.symbol=symbol
        self.number=number
    def dump(self):
        print(f'{self.name=},{self.symbol=},{self.number=}')`

`hydrogen=Element(**el_dict)
hydrogen.dump()

dumpのprintの中身にselfを加えるとエラーは出ないものの、
self.name="Hydrogen"のようにself.がひっついてしまう。

回答は修正前のコードで
name="Hydrogen"のようにうまく表示されます。
誤植なのでしょうか。

0

2Answer

@treefield Python 3.9 で試しても同様のエラーが出ました。 dump メソッドの中にローカル変数 name がないので、 f-string に対応していても NameError になります。

@hamachiburi9 誤植だと思います。出力に self. とついてもよければ、お試しになった通りの書き方が正解です。つかないほうがいいなら一度ローカル変数に代入してください。

    def dump(self):
        name, symbol, number = self.name, self.symbol, self.number
        print(f'{name=},{symbol=},{number=}')
2Like

Comments

  1. @hamachiburi9

    Questioner

    回答ありがとうございました
    お礼が大変遅くなり、申し訳ございません。

「該当するソースコード」の方は、下記のf-stringの部分がPython3.8以降での書き方だと思います。Python3.7までの環境だとエラーになるのではないでしょうか。

f'{name=},{symbol=},{number=}'

Python3.8では、{}でくくった変数や式に=を付けると、評価結果と同時にその変数や式を文字列で表示してくれる機能が追加されました。

0Like

Comments

  1. @usai さん、そうですね。「自分で試したこと」の方も、f-stringの使い方は変わっていないので、そこではないですね。確認不足で失礼しました。
    @hamachiburi9 さんの「自分で試したこと」の方が正しいですね。私も3.9.6の環境で試してみました。
  2. @hamachiburi9

    Questioner

    回答ありがとうございました
    お礼が大変遅くなり、申し訳ございません。

Your answer might help someone💌