まず、エラーと例外
1.構文エラー(pycharmが赤色に報告され、Pythonのインタープリターを渡すことができませんでした)
如:印刷( "Hello World" の
2.論理エラー
以下のような:RES = 1/0
リー= [1,2,3] プリント(LI [10])
年齢=入力(「年齢を入力してください:」) 年齢= INT(年齢)
トレースバック:異常な追跡。IndexError:例外クラス。範囲外のリストインデックス:外れ値
一般的な異常な オブジェクトツリーは、そのようなfoo.x、ない属性fooのXアクセスしようとしないではAttributeError 例外IOError入力/出力が異常である;、実質的にないオープンされたファイル はImportErrorパッケージまたはモジュールを導入することができない、実質上のエラー問題に名前を付けたり、パス IndentationError構文エラー(サブクラス);コードが正しく整列されていない [5]そのようなXの場合に3つのだけの要素として配列の境界の外にはIndexError添字インデックスは、Xアクセスしようとしている KeyError例外辞書にアクセスしようとすると、結合が存在しない KeyboardInterruptはCtrl + Cが押され下 NameError変数がオブジェクトを指定されていない使用 にSyntaxError Pythonコードを違法である、コードはコンパイルされません(個人的に間違っている、それは構文エラーだと思う) はTypeError入ってくるオブジェクト型は、の要件を満たしていない UnboundLocalErrorがアクセスしようとする設定されていません基本的に起因するそれ以外の場合は、グローバル変数と同じ名前のローカル変数は、 あなたはそれがアクセスされていると思います起こす タイプの値が正しい場合でも、とValueErrorの着信呼び出し側が値を期待していません
第二に、例外処理
1.what:Pythonのインタープリタがエラーを検出または例外は、プログラマがトリガされ、特定の分岐を実行する他の処理ロジックを入力することができる異常を捕捉するプログラムがクラッシュする原因となりました。
2.why:Pythonのインタープリターは、プログラムがエラーを検出実行し、プロセスが捕捉されていない場合、それはプログラムを終了し、例外をトリガします。堅牢性とフォールトトレランスプログラムを強化するために、我々は、例外処理メカニズムを提供する必要があります。
3.how:私たちはエラーが発生する前に、治療、予防を使用する必要がある場合は、エラー状態が発生した場合は、予測可能であり、条件にエラーが発生した場合には、予測できない、あなたは試す使用する必要があります...エラーで、除きます処理が発生した後、
#基本構文 試み: コードブロックが検出される 例外のタイプを除い: 異常が発生した場合に試行が検出され、この場所で実行されるロジックを
拡張:
#1 异常类只能用来处理指定的异常情况,如果非指定异常则无法处理。 s1 = 'hello' try: int(s1) except IndexError as e: # 未捕获到异常,程序直接报错 print e #2 多分支 s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) #3 万能异常Exception s1 = 'hello' try: int(s1) except Exception as e: print(e) #4 多分支异常与万能异常 #4.1 如果你想要的效果是,无论出现什么异常,我们统一丢弃,或者使用同一段代码逻辑去处理他们,那么骚年,大胆的去做吧,只有一个Exception就足够了。 #4.2 如果你想要的效果是,对于不同的异常我们需要定制不同的处理逻辑,那就需要用到多分支了。 #5 也可以在多分支后来一个Exception s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) except Exception as e: print(e) #6 异常的其他机构 s1 = 'hello' try: int(s1) except IndexError as e: print(e) except KeyError as e: print(e) except ValueError as e: print(e) #except Exception as e: # print(e) else: print('try内代码块没有异常则执行我') finally: print('无论异常与否,都会执行该模块,通常是进行清理工作') #7 主动触发异常 try: raise TypeError('类型错误') except Exception as e: print(e) #8 自定义异常 class EgonException(BaseException): def __init__(self,msg): self.msg=msg def __str__(self): return self.msg try: raise EgonException('类型错误') except EgonException as e: print(e) #9 断言:assert 条件 assert 1 == 1 assert 1 == 2 #10 总结try..except 1:把错误处理和真正的工作分开来 2:代码更易组织,更清晰,复杂的工作任务更容易实现; 3:毫无疑问,更安全了,不至于由于一些小的疏忽而使程序意外崩溃了;