Python問題集を解いてみよう!!

【Python】やりがちなミス

Pythonやりがちなミス
URLをコピーする
URLをコピーしました!

for文のやりがちなミスを下記記事で紹介しました。

本記事ではfor文以外のやりがちなミスを集めていきたいと思います。

本ブログは Colofulbox で運用しています
目次

同じ名前を付ける

同じ名前を付ける というミス。やりがちです。

色々なパターンがありますが、モジュール名を変数名に付けてしまうパターンが多いように思うので、そのパターンを見てみましょう。

import time

result = 0

time = time.time()

for i in range(1, 101):
    result += i

end_time = time.time()

print('1から100を足した合計は', result, 'です。')

print('計算時間は',end_time - time, '秒です。')

これは「1〜100の整数を全て足した合計を求め、その結果と計算時間を表示する」というプログラムを書こうとしたものですが、このまま実行すると、

同じ名前を付けてしまうと。。。

エラーになってしまいます。

エラーになったのは10行目。エラーの種類は「AttributeError」。

AttributeErrorは直訳すると「属性エラー」ですが、無いメソッドなどを書くとこのエラーになります。

エラーメッセージは「’float’ object has no attribute ‘time’」とあるので、time なんて無いよ〜と教えてくれています。

Pyウーマン

え?でも、5行目でも同じ書き方してるのに、これはエラーにならないの?

そうなんですよね。

このミスの特徴の1つとして、2箇所で同じ書き方をしているのに、先に書いた方はエラーにならず、後に書いた方だけエラーになっていることがあります。

今回の例はエラーが起きるようにワザとミスをしているので、あからさまですが、計算時間を求めるためにtimeというモジュールをインポートしていますが、プログラムの中でtimeというモジュールと同じ名前の変数を定義してしまったことがエラーの原因です。

5行目のtime.time()の左側のtimeはインポートしたモジュールを指していますが、10行目のtime.time()のほうは5行目で定義した変数のtimeになっています。

ということで、修正は簡単です。変数名をtimeから変更してあげるだけですね。

修正版のコード

import time

result = 0

start_time = time.time()

for i in range(1, 101):
    result += i

end_time = time.time()

print('1から100を足した合計は', result, 'です。')

print('計算時間は', end_time - start_time, '秒です。')

一部分だけデータの型が異なっている

これはPythonに限らないのですが、よく見かけるミスです。

何百、何千行もあるような量の多いデータを取り込んで処理をしたり、Web上になるデータをスクレイピングしてきて処理したりする場合によく見かける気がします。

データのほとんどはintだったりfloatだけど、一部分だけstrになっていたり、データが抜けていたりして、エラーになってしまうようなケースです。

例えば、こんなケース。

2月、3月の平均が出ない。。。

PandasのDataFrameとして数値データを取り込んで、月毎の平均値を出しているようですが、、、

Pyマン

なぜ2月と3月だけ表示されないんだろう。。。

と悩まれている方を最近見かけました。

その原因はこちら。

外部からデータを取り込んで処理する際は、そのデータが想定通りの型になっているか、必ずチェックするようにしましょう。

Colab

掲載しているコードは Google Colaboratory で確認できます。

環境構築の不要な Google が提供している Webサービスなので、Python を学習中の方にはオススメです。

おわりに

やりがちなミスって意外とあると思うので、気になったものがあったらドンドン追記していきます。

こんなのもあるよ〜というのがあればぜひ教えてください。

以上です。

広告

Pythonやりがちなミス

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
URLをコピーする
URLをコピーしました!

コメント

コメントする

目次
閉じる