質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

1103閲覧

クラスをカプセル化したい!

Ponde_ling

総合スコア8

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/09/01 12:34

わからないこと

エラーがなぜ出るのか、どう直せばエラー無くなるのかがわかりません。エラーメッセージ
に書いてある、ラインを確認しても何が間違いなのかがわからない状態です。初歩的なミスの可能性もありますが、よろしくお願いします。

補足

以前に、テキストでのミスがあり辞書データとして読み書きできなかった問題がありましたが解決しており、今回はテキストでのミスはないと思われます。> https://teratail.com/questions/208019

コード

このプログラムは、質問をしてテキストから答えを持ってくることで、回答するプログラムです。参考書から引用しているため、大幅なコードの間違いは無いと思われます。

python

1class Dictionary: 2 3 def __init__(self): 4 """ 辞書オブジェクトの作成 5 """ 6 self.__load_history() 7 8 def __load_history(self): 9 """ファイルを読み込み、世界史の辞書オブジェクトを作成 10 """ 11 with open('data/world_history.txt', 'r', encoding='utf_8' 12 ) as file: 13 lines = file.readlines() 14 15 new_lines = [] 16 17 for line in lines: 18 line = line.rstrip('\n') 19 if line != '': 20 new_lines.append(line) 21 separate = [] 22 for line in new_lines: 23 sp = line.split('\t') 24 separate.append(sp) 25 self.__history = dict(separate) 26 27 def save(self): 28 """self.historyの内容を加工してファイルに書き込む 29 """ 30 write_lines = [] 31 32 for key, val in self.history.items(): 33 write_lines.append(key + '\t' + val + '\n') 34 with open('data/world_history.txt', 'w', encoding='utf_8') as f: 35 f.writelines(write_lines) 36 37 def get_history(self): 38 return self.__history 39 40 def set_history(self, history): 41 self.__history = history 42 43 history = property(get_history, set_history) 44 45 46if __name__ == '__main__': 47 48 dictionary = Dictionary() 49 print(dictionary.history) 50 dictionary.save() 51

world_history.txt

txt

1古代ギリシアの植民市 ビサンティウム、ネアポリス、マッサリア 2古代ギリシアの三大悲劇詩人 アイスキュロス、ソフォクレス、エウリピデス 3シェイクスピアの四大悲劇 オセロ、マクベス、リア王、ハムレット 4ローマ帝王の五賢帝 ネルヴァ、トラヤヌス、ハドリアヌス、アントニヌス・ピウス、マルクス・アウレリウス・アントニヌス 5カースト制度の身分 バラモン、クシャトリヤ、ヴァイシャ、シュードラ 6ロシアの歴代大統領 エリッツン、プーチン、メドヴェージェフ 7世界四大文明 エジプト文明、メソポタミア文明、インダス文明、黄河文明 8三国志の三国 魏、呉、蜀 9ルネサンス期の三大発明 火薬、羅針盤、活版印刷 10三国時代の三国 高句麗、百済、新羅

エラーメッセージ

Traceback (most recent call last): File "C:/Users/beret/PycharmProjects/SampleProject/histly_dictionaly.py", line 48, in <module> dictionary = Dictionary() File "C:/Users/beret/PycharmProjects/SampleProject/histly_dictionaly.py", line 6, in __init__ self.__load_history() File "C:/Users/beret/PycharmProjects/SampleProject/histly_dictionaly.py", line 25, in __load_history self.__history = dict(separate) ValueError: dictionary update sequence element #0 has length 1; 2 is required

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

world_history.txtがタブ区切りになってないせいでsplitできてないとか?

投稿2019/09/01 13:02

nomuken

総合スコア1627

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ponde_ling

2019/09/01 13:12

コメントありがとうございます。そこの確認はできています。
Zuishin

2019/09/01 13:15 編集

いや、横からですが、絶対できてないと思います。タブコードではなく複数のスペースになっていて、このままだと質問に掲載されたエラーが出ました。 しかし、これをタブに変えるとうまく動きました。 エディタの設定によってはタブをスペースに変換するものがありますから、その設定を切って保存してください。
Ponde_ling

2019/09/01 13:18

コメントありがとうございます。再度確認したところ、タブで作成したはずのテキストが複数のスペースになっていました。設定を切った所改善されました。ありがとうございます。
nomuken

2019/09/01 13:21

そのまま試してみましたが world_history.txtをそのまま →現象再現する。 world_history.txtのスペースをタブに変換(SAKURAエディタ使用) →正常動作する。 でした。
nomuken

2019/09/01 13:21

解決してましたか、よかったです。
Ponde_ling

2019/09/01 13:22

ありがとうございました。
guest

0

google翻訳
ValueError: 辞書更新シーケンス要素#0の長さは1です。 2が必要です

ということです。2必要なのに1しかないといってますぜ

投稿2019/09/01 12:44

y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ponde_ling

2019/09/01 13:12

コメントありがとうございます。どの様にプログラムを書き直せばいいのでしょうか
y_waiwai

2019/09/01 13:22

書き直すより前に、 > self.__history = dict(separate) でエラーが出てると言うんだから、この separate の値を確認してみればどうですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問