Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの具体的な例外


Pythonにはいくつかの一般的な例外があります。これらの例外は通常、さまざまなプログラムで発生します。これらはプログラマーによって明示的に発生する可能性があります。または、Pythonインタープリターがこれらのタイプの例外を暗黙的に発生させる可能性があります。これらの例外のいくつかは次のとおりです-

例外AssertionError

アサートステートメントが失敗すると、AssertionErrorが発生する場合があります。 Pythonにはいくつかありますが、コードにassertステートメントを設定することもできます。 assertステートメントは常にtrueである必要があります。条件が失敗すると、AssertionErrorが発生します。

サンプルコード

class MyClass:
   def __init__(self, x):
      self.x = x
      assert self.x > 50
 myObj = MyClass(5)

出力

---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-21-71785acdf821> in <module>()
      4         assert self.x > 50
      5 
----> 6 myObj = MyClass(5)

<ipython-input-21-71785acdf821> in __init__(self, x)
      2     def __init__(self, x):
      3         self.x = x
----> 4         assert self.x > 50
      5 
      6 myObj = MyClass(5)

AssertionError:

例外属性エラー

クラスの一部の属性にアクセスしようとすると、属性エラーが発生する可能性がありますが、その属性には存在しません。

サンプルコード

class point:
   def __init__(self, x=0, y=0):
      self.x = x
      self.y = y
        
   def getpoint(self):
      print('x= ' + str(self.x))
      print('y= ' + str(self.y))
      print('z= ' + str(self.z))
pt = point(10, 20)
pt.getpoint()

出力

x= 10
y= 20
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-15-f64eb52b2192> in <module>()
     10 
     11 pt = point(10, 20)
---> 12 pt.getpoint()

<ipython-input-15-f64eb52b2192> in getpoint(self)
      7         print('x= ' + str(self.x))
      8         print('y= ' + str(self.y))
----> 9         print('z= ' + str(self.z))
     10 
     11 pt = point(10, 20)

AttributeError: 'point' object has no attribute 'z'

例外ImportError

インポート時にImportErrorが発生する場合があります ステートメントは、いくつかのモジュールをインポートするためにいくつかの問題に直面しています。 fromステートメントへのパッケージ名が正しいが、指定された名前としてモジュールが見つからない場合にも発生する可能性があります。

サンプルコード

from math import abcd    def __init__(self, x=0, y=0):

出力

---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-23-ff4519a07c77> in <module>()
----> 1 from math import abcd

ImportError: cannot import name 'abcd'

例外ModuleNotFoundError

これは、ImportErrorのサブクラスです。モジュールが見つからない場合、このエラーが発生する可能性があります。 なしの場合にも発生する可能性があります sys.modulesにあります。

サンプルコード

import abcd

出力

---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-24-7b45aaa048eb> in <module>()
----> 1 import abcd

ModuleNotFoundError: No module named 'abcd'

例外インデックスエラー

シーケンスの添え字(リスト、タプル、セットなど)が範囲外の場合、インデックスエラーが発生する可能性があります。

サンプルコード

myList = [10, 20, 30, 40]
print(str(myList[5]))

出力

---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-29-a86bd85b04c9> in <module>()
      1 myList = [10, 20, 30, 40]
----> 2 print(str(myList[5]))

IndexError: list index out of range

例外RecursionError

RecursionErrorはランタイムエラーです。最大再帰深度を超えると、最大再帰深度が増加します。

サンプルコード

def myFunction():
   myFunction()
myFunction()

出力

---------------------------------------------------------------------------
RecursionError Traceback (most recent call last)
<ipython-input-39-8a59e0fb982f> in <module>()
      2     myFunction()
      3 
----> 4 myFunction()

<ipython-input-39-8a59e0fb982f> in myFunction()
      1 def myFunction():
----> 2     myFunction()
      3 
      4 myFunction()

... last 1 frames repeated, from the frame below ...

<ipython-input-39-8a59e0fb982f> in myFunction()
      1 def myFunction():
----> 2     myFunction()
      3 
      4 myFunction()

RecursionError: maximum recursion depth exceeded

例外StopIteration

Pythonでは、next()と呼ばれる組み込みメソッドによってStopIterationエラーを取得できます。 1つのイテレータにそれ以上の要素がない場合、next()メソッドはStopIterationエラーを発生させます。

サンプルコード

myList = [10, 20, 30, 40]
myIter = iter(myList)
while True:
   print(next(myIter))

出力

10
20
30
40
---------------------------------------------------------------------------
StopIteration Traceback (most recent call last)
<ipython-input-42-e608e2162645> in <module>()
      2 myIter = iter(myList)
      3 while True:
----> 4     print(next(myIter))

StopIteration: 

例外インデンテーションエラー

Pythonコードに無効なインデントがあると、この種のエラーが発生します。 SyntaxErrorを継承します Pythonのクラス。

サンプルコード

for i in range(10):
   print("The value of i: " + str(i))

出力

File "<ipython-input-44-d436d50bbdc8>", line 2
    print("The value of i: " + str(i))
        ^
IndentationError: expected an indented block

例外TypeError

TypeErrorは、不適切なタイプのオブジェクトに対して操作が実行されたときに発生する可能性があります。たとえば、配列インデックスに浮動小数点数を指定すると、TypeErrorが返されます。

サンプルコード

muList = [10, 20, 30, 40]
print(myList[1.25])

出力

---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-46-e0a2a05cd4d4> in <module>()
      1 muList = [10, 20, 30, 40]
----> 2 print(myList[1.25])

TypeError: list indices must be integers or slices, not float

例外ZeroDivisionError

除算の問題で分母が0(ゼロ)の場合、ZeroDivisionErrorが発生します。

サンプルコード

print(5/0)

出力

---------------------------------------------------------------------------
ZeroDivisionError  Traceback (most recent call last)
<ipython-input-48-fad870a50e27> in <module>()
----> 1 print(5/0)

ZeroDivisionError: division by zero

  1. Pythonでの二分木の直径

    二分木があるとしましょう。木の直径の長さを計算する必要があります。二分木の直径は、実際には、ツリー内の任意の2つのノード間の最長パスの長さです。このパスは必ずしもルートを通過する必要はありません。したがって、ツリーが以下のようになっている場合、パスの長さ[4,2,1,3]または[5,2,1,3]は3であるため、直径は3になります。 これを解決するには、次の手順に従います- dfsを使用して直径を見つけ、答えを設定します:=0 ルートdfs(root)を使用してdfs関数を呼び出します dfsは以下のdfs(node)のように機能します ノードが存在しない場合は、0を返します 左

  2. Pythonでの継承

    この記事では、Python3.xでの継承と拡張クラスについて学習します。またはそれ以前。 継承は実際の関係をうまく表し、再利用性を提供し、推移性をサポートします。開発時間が短縮され、メンテナンスが容易になり、拡張も容易になります。 継承は大きく5つのタイプに分類されます- シングル 複数 階層的 マルチレベル ハイブリッド 上の図に示されているように、継承とは、実際に親クラスのオブジェクトを作成せずに、他のクラスの機能にアクセスしようとするプロセスです。 ここでは、単一の階層型継承の実装について学習します。 単一継承 例 # parent class class Studen