はじめに:他の人がPythonとクラスベース、ビジネスロジック、またはそれ自体のコードのロジックの不完全な行によるの完全なセットを書きながら、いくつかの時間前に、Pythonインタプリタは、テスト中の例外の多様性を投げ、そのためだろうここでは簡単な結論であることを自分自身を与え、Pythonの例外トラップメカニズムをコンパイル。
目標
- 珍しいコンセプト
- 例外をキャッチ
- 異常配達
- 例外を投げます
1.珍しいコンセプト
- プログラムが実行されている場合は、場合pytonインタプリタエラーに出会い、あるプログラムの実行、および迅速ないくつかの間違った情報、終了異常を。
- プログラムは、実行を停止してエラーメッセージが呼び出され、このアクションを促した例外がスローされます。(人魚で初めて、私を許して)
実際に、分かりやすく、それが異常な製品の安定性と堅牢性をキャプチャすることです
例外をキャッチ2
例外をキャッチするための2.1単純な構文
- プログラム開発、いくつかのコードの実行であれば、右が増加することができますかどうかは不明しようとした例外をキャッチします
- キャッチ例外最も簡単な構文は次のとおりです。
try:
pass # 要尝试执行的代码
except:
pass # 出现错误的处理
- してみてください:試して、コードが正常に実行できるかどうか、以下の不確実なコードを書いてみます
- 除く:いない場合は、次のコードはで失敗した書き込みをしてみてください
。ケース1:
try:
# 提示用户输入一个整数
num = int(input('请输入一个整数:'))
result = 10 / num
print(result)
except:
print('请输入正确的数字')
レッツ・テスト:
请输入一个整数:10
1.0
Process finished with exit code 0
文字を入力してご参加ください。
请输入一个整数:a
请输入正确数字
明らかに、このメカニズムは非常に強力です。
エラートラップの2.2型
- プログラムの実行中に、あなたが発生する可能性のあるさまざまな例外のタイプ、および必要な例外の種類ごとに、異なる応答、この時間は、我々は、エラーの種類をキャプチャする必要があります
- 構文は次のとおりです。
try:
# 尝试执行的代码
pass
except 错误类型1:
# 针对错误类型1,对应的代码处理
pass
except (错误类型2, 错误类型3):
# 针对错误类型2 和 3,对应的代码处理
pass
except Exception as result:
print("未知错误 %s" % result)
- ときにPythonインタプリタは例外がスローされたときに、エラーメッセージの最後の行の最初の単語は、間違った型です!!!
私たちはのtry-除く文を適用しない場合:
num = int(input('请输入一个整数:'))
print(num)
私たちは、文字を入力して、次のコマンドを実行します。
请输入一个整数:a
Traceback (most recent call last):
File "你的python文件路径和名称", line (这里是在第几行报错), in <module>
num = int(input('请输入一个整数:'))
ValueError: invalid literal for int() with base 10: 'a'
これは、エラーメッセージの最初のワードであったとValueError、これはエラーの種類です。
キャプチャエラータイプ
try:
# 提示用户输入一个整数
num = int(input('请输入一个整数:'))
result = 10 / num
print(result)
except ZeroDivisionError:
print('除0错误')
except ValueError:
print('请输入一个正常整数')
不明なエラーをキャプチャ
- 開発では、すべての可能なエラーを予測し、またはいくつかの困難を持っています
- あなたは関係なく、エラー発生のプログラムをしたい場合は、Pythonインタプリタが終了しているため、我々は除いて別のものを追加することができます例外をスローしません。
構文は次のとおりです。
except Exception as e:
print("未知错误 %s" % e)
ここでは、この単純な例外クラスを見てみましょう。
class Exception(BaseException):
""" Common base class for all non-exit exceptions. """
def __init__(self, *args, **kwargs): # real signature unknown
pass
@staticmethod # known case of __new__
def __new__(*args, **kwargs): # real signature unknown
""" Create and return a new object. See help(type) for accurate signature. """
pass
クラス初期化時間から継承BaseExceptionタプルとキーワードパラメータを渡すことができ、その後、静的メソッド、明瞭クラス構造が続いています。
2.3異常キャプチャ完全な構文
- 次のように実際の開発では、複雑な異常に対処できるようにするために、異常な完全な構文は次のとおりです。
try:
# 尝试执行的代码
pass
except 错误类型1:
# 针对错误类型1,对应的代码处理
pass
except 错误类型2:
# 针对错误类型2,对应的代码处理
pass
except (错误类型3, 错误类型4):
# 针对错误类型3 和 4,对应的代码处理
pass
except Exception as result:
# 打印错误信息
print(result)
else:
# 没有异常才会执行的代码
pass
finally:
# 无论是否有异常,都会执行的代码
print("无论是否有异常,都会执行的代码")
- 他に異常が実行されませんがある場合にのみコードがあります
- 最後に、例外があるかどうか、コードがで実行される
ケース1の最適化
try:
# 提示用户输入一个整数
num = int(input('请输入一个整数:'))
result = 10 / num
print(result)
except ValueError:
print('请输入一个正常整数')
except Exception as e:
print('未知整数 %s' % e)
else:
print('尝试成功')
finally:
print('无论是否出现错误都会执行')
3.例外が渡される必要があります
- 異常転写 - 関数/メソッドの実行例外が発生した場合、異常な関数に渡される/方法は、1つを呼び出し
- あなたはまだ例外ハンドラのメインプログラムに渡すと、プログラムは終了します
ヒント:
- 開発では、我々は、主な機能の異常上昇をキャプチャすることができます
- メイン関数内の他の関数呼び出し限り、例外は、例外は、主な機能の取り込みに渡されます。これは、クリーンなコードを確保するために、例外トラップの数を増やすために、コードでの必要性を排除し
ケース2
def fun1():
return int(input('请输入一个整数:'))
def fun2():
return fun1()
try:
print(fun2())
except Exception as e:
print(e)
finally:
print('程序终止')
4.スローされた例外のレイズ
4.1アプリケーションのシナリオ
- 開発では、Pythonの外部コードの実行エラーに加えて、インタプリタは、例外をスロー
- しかし、また、アプリケーション固有のビジネスニーズアクティブスローに応じた
例- ユーザーは、長さが8未満である場合には、パスワードの入力を求めるメッセージが表示され、例外がスローされます
。注:- 現在の機能は、パスワードの長さが間違っている場合は、パスワードをユーザに促すための唯一の責任があり、他の機能には、追加の処理を必要と
- あなたは例外を投げることができるので、キャッチ例外は、他の機能によって対処する必要があります
- ユーザーは、長さが8未満である場合には、パスワードの入力を求めるメッセージが表示され、例外がスローされます
4.2は、例外がスローされます
- Pythonは例外クラスの例外が設けられています。
- 開発では、満たす特定のビジネスニーズあれば、我々は例外をスローするように望んでいる、次のことができます。
- 例外のオブジェクトを作成します。
- キーワード昇給投げられたオブジェクトを使用します
需要
- 定義関数Input_password、ユーザーはパスワードを入力するように求めています
- ユーザーが長<8を入力すると、例外がスローされます
- ユーザが長さ> = 8を入力すると、入力されたパスワードを返し
、次のようにコードです。
def input_password():
pwd = input('请输入密码:')
# 如果 < 8 主动抛出异常
if len(pwd) >= 8:
return pwd
print('主动抛出异常')
# 创建异常对象 可以使用错误信息字符串作为参数
# 还记得Exception的__init__(self, self, *args, **kwargs)吗?
ex = Exception("密码长度不够, 需要重新输入")
raise ex
try:
print(input_password())
except Exception as e:
print(e)
この目的を達成するために、記録何時間も:
In [1]: from datetime import datetime
In [2]: print(datetime.now())
2020-02-15 14:07:56.561248
In [3]: