[python]例外処理


第五章整理


1朕
2▼▼異常処理
3π𔣤内蔵関数
4
5」練習問題
  • 参考資料教材:ジャンプデュアルPython 05-4異常処理2
  • リファレンスレッスンビデオ:Pythonコード基礎課-Python翼付き2
  • 以上の教材学習を参考にして、教材に基づいて内容を整理しました.🐍💨
    第五章の名前は「Pythonの翼を持つ」だから必要な重要な概念と難しい概念💢
    俺のレベルもレベルだけど!例外処理も見慣れないあの川のビデオだけで5回も見ました.
    「ああなるほど」と頭の中で思っていたのですが、あまり使わないのですぐに忘れてしまい、実戦でどう使われているのか気になりました.🤔
    先に見せてください.

    1.エラーはいつ発生しますか。


    エラーの処理方法を理解する前に、エラーがどのような状況で発生したかを理解する必要があります.
    ディレクトリにないファイルを開こうとしたときに発生したエラー
    >>> f = open("나없는파일", 'r')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    FileNotFoundError: [Errno 2] No such file or directory: '나없는파일'
  • FileNotFoundErrorエラー
  • 𘥦0を他の数字で割った場合
    >>> 4 / 0
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ZeroDivisionError: division by zero
  • ZeroDivisionErrorエラー
  • ❗私の大嫌いな間違い
    >>> a = [1,2,3]
    >>> a[4]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list index out of range
  • IndexErrorエラー
  • リスト配列が一致しないエラーは私を狂わせる😭

    2.エラー異常処理テクニック


    これらのエラーを処理する方法を見てみましょう.
    今度親しくなる友達を見てみましょう

    (1)try,文を除く

    try:
    	...
    except [발생 오류[as 오류 메시지 변수]]:
    	...
    tryブロックにエラーが発生した場合は、除外ブロックで実行します.tryブロックにエラーがない場合は、除外ブロックは実行されません.
    「エラー発生」「asエラーメッセージ変数」を除く:
    上の構文では[]記号を使用します.これはカッコ内の内容を省略できることを示す慣例記号です.
    つまり、「除外」構文には、次の3つの方法があります.

    1)try、除外する方法のみ使用

    try:
    	...
    except:
    	...
    この場合、エラー名は作成されません.したがって、エラーのタイプに関係なく、エラーが発生した場合はブロックの除外が実行されます.

    2)エラーが発生した例外文のみを含む

    try:
    	...
    except 발생 오류:
    	...
    「≪ブロックの除外|Exclude Block|emdw≫」操作は、エラーが発生したときに「≪除外|Exclude|emdw≫」文で定義されたエラー名と一致する場合にのみ実行されます.

    3)エラーとエラーメッセージ変数を含む異常文

    try
    	...
    except 발생 오류 as 오류 메시지 변수:
    	...
    2つ目の場合、この方法は、エラーメッセージの内容を知りたい場合に使用できます.
    この方法の例は次のとおりです.
    try:
    	4 / 0
    except ZeroDivisionError as e:
    	print(e)
    4を0で除算しようとすると、ZeroDivisionErrorが表示され、除外ブロックが実行され、変数eに含まれるエラーメッセージが出力されます.
    結果:division by zero

    (2) try .. finally


    try文はfinallyセクションを使用できます.
    finallyセクションは、try文の実行中に例外が発生したかどうかにかかわらず、常に実行されます.
    通常、finallyセクションは、使用するリソースを閉じる必要がある場合に使用します.
    f = open('foo.txt', 'w')
    try:
        # 무언가를 수행한다.
    finally:
        f.close()
    foo.書き込みモードでtxtファイルを開くと、試行文が異常であるかどうかにかかわらずfinallyセクションでf.close()で開いているファイルを閉じることができます.

    (3)複数のエラーの処理


    try文で複数のエラーを処理したい場合があります.この場合、if文を使用するように複数のelifを使用して複数のエラーを処理することができます.
    このためには、次の構文を使用します.
    try:
        ...
    except 발생 오류1:
       ... 
    except 발생 오류2:
       ...
    Exceptionは複数回利用できます!
    try:
        a = [1,2]
        print(a[3])
        4/0
    except ZeroDivisionError:
        print("0으로 나눌 수 없습니다.")
    except IndexError:
        print("인덱싱 할 수 없습니다.")
    この例では、2回の書き込み文で発生した2つのエラーを処理します.
  • ZeroDivisionError
  • IndexError
  • ここからエラーメッセージを取得したいので、訂正します.
    try:
        a = [1,2]
        print(a[3])
        4/0
    except ZeroDivisionError as e:
        print(e)
    except IndexError as e:
        print(e)
    するとエラーメッセージが出力されます.
    しかし、何度も書くのは除外だと思っていたので、一度でも処理できます.😳
    try:
        a = [1,2]
        print(a[3])
        4/0
    except (ZeroDivisionError, IndexError) as e:
        print(e)
    except (ZeroDivisionError, IndexError) as e:
    同じエラーを処理するために、カッコを使用して囲みます.

    +)try文でelseを使用する


    try文はelseが使用可能であることを示します.😳 複雑でしょ?私は今でも混乱しています.
    try:
    	...
    except [발생 오류 [as 오류 메시지 변수]]:
    	...
    else # 오류가 없을 경우에만 수행됨
    	...
    文の試行中にエラーが発生した場合は「≪除外|Exclude|emdw≫」セクション、エラーがない場合はelseセクションを実行します.
    try文でelseセクションを使用する簡単な例を次に示します.
    try:
        age=int(input('나이를 입력하세요: '))
    except:
        print('입력이 정확하지 않습니다.')
    else:
        if age <= 18:
            print('미성년자는 출입금지입니다.')
        else:
            print('환영합니다.')
    「≪年齢の入力:|Input Age:|emdw≫」の問題で入力した値が数値ではなく、他の値である場合、エラーが発生します.
    入力が正しくありません出力します.
    elseセクションは、エラーがない場合にのみ実行されます.elseセクションにはif-elseセクションもあります今は二度とこんなことに混同されない...😳
  • try-exce-else構文
  • inputはint値(try)ではなくエラー出力(を除く)
  • である.
    入力値エラーがない場合はelseセクションを実行する.
    入力値が18未満の場合は、
  • を入力します.(if-else文の実行)
  • 3.エラー回避


    いつも回避したい瞬间がたくさんある.
    プログラミング中に、直接伝える必要があるエラーも発生することがあります.
    try:
    	f = open("나 없는 파일이야.", "r")
    except FileNotFoundError:
    	pass
    try文でFileNotFoundErrorが発生した場合、passを使用してエラーを回避する例を作成します.

    4.わざとミスをする


    どうしてわざと.と思いますが、わざと起こることもあります!いったいどんな状況なのか.
    ここでまた新しい友達に会いましたこれが一番疎遠な感じがします
    raiseコマンドを使用して、エラーを強制的に実行できます.
    たとえばbirdというクラスを継承するサブクラスにflyというメソッドを実装する場合は、
    class Bird:
    	def fly(self):
    		raise NotImplementedError
    ※NotImplementedErrorはPython内蔵エラーで、記入しなければならない部分が実現していない場合は故意に使用します.
    class Eagle(Bird):
        pass
    
    eagle = Eagle()
    eagle.fly()
    EagleクラスはBirdクラスを継承します.ただし、Eagleクラスではfly関数が実装されていないため、Birdクラスのfly関数が呼び出されます.raise文は、NotImplemented Errorをもたらします.
    ※継承クラスでの関数の再実装をメソッドオーバーラップと呼ぶ.
    # 발생 오류 확인하기
    Traceback (most recent call last):
      File "...", line 33, in <module>
        eagle.fly()
      File "...", line 26, in fly
        raise NotImplementedError
    NotImplementedError
    NotImplementedErrorを回避するには、次のようにEagleクラスでfly関数を実装する必要があります.
    class Eagle(Bird):
        def fly(self):
            print("very fast")
    
    eagle = Eagle()
    eagle.fly()
    fly関数が実装され、エラーは発生せず、出力速度が非常に速い.

    5.例外の作成


    通常、プログラムを実行すると、例外が作成され、使用され、特別な場合に例外処理が行われます.
    例外として、Python組み込みクラスExceptionクラスを継承して作成できます.
    class MyError(Exception):
        pass
    次に、クラスにも作成された関数を作成します.
    def say_nick(nick):
    	if nick == '바보':
        		raise MyError()
            print(nick)
    次に関数を呼び出します.
    say_nick('천사')
    say_nick('바보')
    保存してプログラムを実行し、「エンジェル」を一度出力するとMyErrorが発生します.
    천사
    Traceback (most recent call last):
      File "...", line 11, in <module>
        say_nick("바보")
      File "...", line 7, in say_nick
        raise MyError()
    __main__.MyError
    ここで,異常処理技術を用いてMyErrorの具体的な値異常を処理する.
    try:
    	say_nick('천사')
        say_nick('바보')
    except MyError:
    	print("허용되지 않는 별명입니다.")
    もう一度実行すると、エラーの代わりになります.
    천사
    허용되지 않는 별명입니다.
    表示されます.
    出力エラーメッセージに変更したい場合は?
    try:
    	say_nick('천사')
        say_nick('바보')
    except MyError as e:
    	print(e)
    ただし、print(e)にエラーメッセージは出力されません.
    これは、エラーメッセージを出力するときにエラーメッセージを表示するには、classで次のstrメソッドを実装する必要があるためです.
    strメソッドは、print(e)などの文出力エラーメッセージを印刷するときに呼び出されるメソッドです.
    使用していたclassは
    class MyError(Exception):
        pass
    これです.
    class MyError(Exception):
        def __str__(self):
        	return "허용되지 않는 별명입니다."
    このように等級を修正します!
    難しいですね.😳 個人は無限の困難だ...!復習をやり直しますがんばってください.🐍