よく言われるように、プログラムを書いていると、いつも順風満帆とは限りません。たとえば、映画を見に出かけるとき、まず外に出てから歩きます。私たちは映画を観た後、買い物に行き、家に帰りました。しかし、映画を観た後、外で雨が降っていることに気づき、買い物の計画をキャンセルして家に帰りました。ここでの雨は異常な状況なので、この例外処理ソリューションを追加するプログラムを設計しました。
まず例外の問題を見てみましょう。コードは次のとおりです。
number=int(input('数字を入力してください:'))if15/number>=3:print('ok')else:print('wrong')
出力結果:
数字を入力してください: 3ok 数字を入力してください: 15wrong 数字を入力してください: 0Traceback(mostrecentcalllast):FileC:/Users/test.py,line2,in<module>if15/number>=3:ZeroDivisionError:divisionbyzero
入力した分母が 0 の場合、プログラムはエラーを報告します。これは、作成したプログラムに問題があることを意味します。分母が 0 の場合にどうするかを考慮していなかったため、プログラムで例外が発生しました。ということで、プログラムを作成しました。 発生する可能性のあるいくつかの異常な状況を考慮する必要があります。いくつかの一般的な異常な状況について学びましょう。
これは、ディクショナリ キーにアクセスし、キー値が存在しない場合に発生する例外です。
コードは次のとおりです。
my_dict={'dotcpp':123}print(my_dict['dot'])
例外は次のとおりです。
Traceback(mostrecentcalllast):FileC:/Users/test.py,line2,in<module>print(my_dict['dot'])KeyError:'dot'
この種の例外は、シーケンス要素にアクセスするときによく発生します。この例外メカニズムは、インデックス値が範囲を超えるとトリガーされます。コードは次のとおりです。
my_list=[1,2,3,4,5]print(my_list[100])
例外は次のとおりです。
Traceback(mostrecentcalllast):FileC:/Users/test.py,line2,in<module>print(my_list[100])IndexError:listindexoutofrange
リストには 5 つの要素しかなく、アクセスが制限を超えるとこの例外がスローされます。
この例外は、未定義の変数を使用するとスローされます。コードは次のとおりです。
name=['www.dotcpp,com']print('既存の変数名:',name)print('存在しない変数 dotcpp:',dotcpp)
例外は次のとおりです。
既存の変数名:['www.dotcpp,com']Traceback(mostrecentcalllast):FileC:/Users/Qingyan/PycharmProjects/untitled1/teach/test.py,line3,in<module>print('存在しない変数 dotcpp: ',dotcpp)NameError:名前「dotcpp」が定義されていません
この例外は、渡されたデータが指定された型と一致しない場合に発生します。たとえば、2 つの整数を加算および減算し、そのうちの 1 つが文字列型を使用している場合に、このエラーが発生します。
コードは次のとおりです。
a=10b='dotcpp'print(a+b)
例外は次のとおりです。
Traceback(mostrecentcalllast):FileC:/Users/test.py,line3,in<module>print(a+b)TypeError:unsupportedoperandtype(s)for+:'int'and'str'
上記は、学習の過程で発生する可能性のある最も一般的な例外の一部です。認識できない例外が発生した場合は、ヘルプ ドキュメントを通じて関連するコンテンツを問い合わせることができます。