呼び出しはパニックする。ようなツールはエラーコードを返しますので、ここでも、そうするべきかもしれません。IOエラーとCSVパースエラーの他に、このプログラム特有のエラーロジックがあるわけです。これらのエラーを扱うために、2つのアプローチを試してみましょう。その後で、独自のエラー型を定義すると、どのように便利になるかを見てみましょう。実装する、といったことは必要ありません。され、コンパイラが背後の型を推測できなくなることです。変更することから始めました。リターン型を付けられるのでしょうか?2つ目の質問の答えはノーです。新しい関数を書くことになります。(もっと良いコードはイテレータを返すかもしれませんが、これは読者の皆さんへの練習問題とします。)該当のコードを、専用の関数へとリファクタリングしましょう。呼び出しはそのままにします。人口のカウントがない場合は、いまは単にその行を無視することに注意してください。人口のカウントがあるときだけ構築されるようになったからです。人口のカウントがあるときだけ構築されるようになったからです。良い版)の使用を1つ取り除くことができましたが、検索の結果が無いときのハンドリングは、依然として必要です。使用することで、プログラムをパニックする代わりに、エラーを呼び出し元に返す。エラーをハンドリングする。found.:条件に合う人口データ付きの都市は見つかりませんでした。マクロは関数の途中で戻ります。すると、プレーンな文字列をエラー型に変換できます。使うために、このような追加の制限が必要でした。こちらの実装を使おうとしています。割り当てる場合は、こちらの実装も使えます。こちらの実装を使おうとしています。割り当てる場合は、こちらの実装も使えます。使った適切なエラーハンドリングについて見ましたので、次は独自のエラー型による別のアプローチを試してみましょう。読み込みをサポートしましょう。標準入力から読み込むこのプログラムでは、入力としてファイルをただ一つ受け取り、1回のパスでデータを処理しています。これは、標準入力からの入力を受け付けたほうがいいことを意味しているのかもしれません。いまの方法も捨てがたいので、両方できるようにしましょう!標準入力のサポートを追加するのは実に簡単です。やることは3つだけです:プログラムの引数を微修正して、唯一のパラメータとして「都市」を受け付け、人口データは標準入力から読み込むようにする。オプションからファイルを得られるようにする。受け取れるようにする。標準入力から読み込む。STDIN:STDINを使う代わりに、入力ファイルを選択する。