私はしばらくの間、Pythonを学んでいます。raise関数とassertは(実際に似ていますが、私が気づいたのはtry - exceptとは違って、両方がアプリをクラッシュさせるということです)試しにRaiseまたはAssertを使用する状況を参照してください。Raise TryとAssertの違い
答えて
アサート:
list_ = ["a","b","x"]
assert "x" in list_, "x is not in the list"
print("passed")
#>> prints passed
list_ = ["a","b","c"]
assert "x" in list_, "x is not in the list"
print("passed")
#>>
Traceback (most recent call last):
File "python", line 2, in <module>
AssertionError: x is not in the list
レイズ:
つあなたが特定の条件に基づいてスクリプトを "停止" と高速デバッグを助けるために何かを返したい場合に使用し
これに便利な理由:
1/tryとexceptブロックで使用します。あなたが選択したエラーを発生させ、以下のようなカスタムになる可能性があります。pass
またはcontiune
スクリプトの場合はスクリプトを停止しません。または事前に定義されたエラーraise ValueError()
class Custom_error(BaseException):
pass
try:
print("hello")
raise Custom_error
print("world")
except Custom_error:
print("found it not stopping now")
print("im outside")
>> hello
>> found it not stopping now
>> im outside
することができ、それが停止していない気づきましたか? exceptブロックでexit(1)だけを使用して停止することができます。
2/Raiseは、現在のエラーをスタックに渡して、別のものがそれを処理できるかどうかを確認するために使用することもできます。
except SomeError, e:
if not can_handle(e):
raise
someone_take_care_of_it(e)
try/exceptブロック:
は、あなたが考えて正確に何んのエラーが起動した場合、あなたはそれをキャッチし、あなたが好きどのように今までそれに対処する、何かをしようとします。上の例があるので、例はありません。
assert cond, "text"
は
if cond == False:
raise AssertionError("text")
使用のようなものに拡張され、それは、より読みやすいので、主張しています。
ありがとう!今より意味をなさない! – Defneit
短くてクリスピーな、ありがとう:) –
raise
- 例外を発生させます。
assert
- の場合は、条件が真(またはそうでない場合)です。
try
- かもしれないいくつかのコードを実行し、例外が発生した場合はそれをキャッチします。
例外は、コード実行時に発生するエラーを処理するためにPython(および他の言語)が使用するものです。 raise ExceptionName
は、コードにエラーがあり、その問題に関連する例外を発生させることによってどのような種類の問題であるかを指定しています。 assert expression
はexpression
と評価され、falseの場合は例外が発生します。
try
は、期待している例外が発生する可能性のあるコードを実行するために使用されます。プログラムを停止する代わりに、例外を「キャッチ」してコード内で処理することができます。
例:辞書とリストがあるとします。あなたは辞書にない1に達するまで、辞書内のリストから物事を見てみたい:
try:
for item in my_list:
print(my_dictionary[item])
except KeyError as e: #KeyError is the Exception raised when a key is not in a dictionary
print('There is no {} in the dictionary'.format(e.args[0]))
ありがとう!今私はあなたのおかげでコーディングを続けることができます! – Defneit
try/except
ブロックでは、例外をキャッチして管理できます。例外は、raise
,assert
によってトリガーされ、空のリストのインデックスを作成しようとするなどの多数のエラーが発生する可能性があります。 raise
は、通常、エラー状態を検出したときに使用されます。 assert
は似ていますが、条件が満たされた場合にのみ例外が発生します。
raise
およびassert
は、異なる考え方を持っています。エラーを検出して発生させるコードには、多くの「通常の」エラーがあります。おそらくウェブサイトが存在しないか、パラメータ値が範囲外です。
アサーションは、一般に「これは起こり得ない」と断言されています。通常のランタイムエラー検出よりもランタイムデバッグに似ています。アサーションを無効にするには、.pyc
ファイルの代わりに-O
フラグを使用するか、.pyo
ファイルを実行すると、アサーションを無効にすることができます。
生産品質コードで例外が発生した場合は、間違ったことを把握してください。 AssertionError
が発生すると、大きな問題が発生します。
ありがとう、たくさんの男。多くの助けてくれました – Defneit
アサートは、一般的に何かが働いていることを確認するためのテストコードで使用されます。
def test_bool():
assert True != False
どことして上げるとハンドルとの誤差を伝播するPythonで好ましい方法である化粧例外処理を除いて、試してみてください。
ほとんどのライブラリとPythonの組み込み関数は、何か問題が生じた場合に、1つの型または別の型の例外と例外を発生させます。あなた自身のコードでは、間違ったことが検出されたときに例外を発生させたいことがあります。たとえば、メールアドレスのバリデータを作成していて、アドレスに@記号が含まれていない場合は例外を発生させたいとしましょう。そして、どこかあなたのコード内で使用すると、validate_email関数を呼び出すことができますし、それが失敗した場合、例外がスローされます
def validate_email(address):
if not "@" in address:
raise ValueError("Email Addresses must contain @ sign")
:あなたは(これはおもちゃのコードで、実際にこのようなメールを検証しません)のようなものを持つことができます。
try:
validate_email("Mynameisjoe.com")
except ValueError as ex:
print("We can do some special invalid input handling here, Like ask the user to retry the input")
finally:
close_my_connection()
print("Finally always runs whether we succeed or not. Good for clean up like shutting things down.")
重要なことは、例外が発生すると、ハンドラが見つかるまでコールスタックに渡されることです。ハンドラが見つからない場合は、例外とスタックトレースを持つプログラムがクラッシュします。今、あなたはあなたのアプリケーションが吹いた理由を知る方法はありません
if __name__ == '__main__':
try:
print(1/0)
except Exception as ex:
pass
:あなたが行うにはしたくない
ことの一つは、のようなものです。それはパラメータと同じエラーが再度発生させていないので、この場合の
import logging
if __name__ == '__main__':
try:
print(1/0)
except Exception as ex:
logging.exception(ex)
raise
昇給:あなたがOKであることが多いでしょう
ことの一つは、のようなものです。しばしばウェブコードでは、クライアントに500のエラーを送信して次のリクエストを実行するので、例外を再発生しないようなものが表示されます。この場合、プログラムを終了させたくありません。
ありがとう – Defneit
- 1. try/exceptとassertの違いは何ですか? AssertionErrorが除い
- 2. "raise"と "raise e"の違いは?
- 3. Pythonのtry-catch-raise例外節の2回振る舞い
- 4. 違い「のtry-catch」
- 5. 違いのtry/catch /スローとのtry/catch(e)の間/スロー電子
- 6. assert()を使用するタイミングとtry catchを使用するタイミング
- 7. Rhino Mock: "Assert"と "Assert"
- 8. festとassert-jのカスタムマップの微妙な違い
- 9. "try"キーワードの配置の違い
- 10. try-with-resourceを使用するとAssert closeが呼び出されます
- 11. Python 3 - raise文
- 12. Clojure: 'assert'の引数が間違っていますか?
- 13. Django Paginator raise TypeError
- 14. Django raise ValidationError
- 15. 私たちはAssertをtryで処理してtestNGをキャッチできますか?
- 16. Office.initialize raise $ rootScope:infdig
- 17. assertオプションパラメータ付きメソッドのレイアース
- 18. raiseイベントmoqのアクション
- 19. Rails raise InvalidURIError
- 20. os.path.isfile raise FileNotFoundError
- 21. QWidget raise matplotlib canvas
- 22. kafka-python raise kafka.errors.ConsumerFetchSizeTooSmall
- 23. tf.image.decode_jpeg raise InvalidArgumentError
- 24. 竜巻raise gen.Return Returnなし
- 25. JUnit Assert#assert Hamcrestに相当する
- 26. NUnit:Dictionary Assert
- 27. ExpectedException Assert
- 28. std :: assert
- 29. Coq:Admit assert
- 30. java.lang.ref.Finalizer OutOfMemory After Memory Raise
raise、assert、またはtryを使用するかどうかを選択できますが、実際には交換できません。また、あなたは質問しませんでした。 – tcooc
ありがとうtcoc!私は確かに質問をしました、もしあなたがこれらの機能のうちの1つだけを使うことができる状況を誰かが私に示すことができればそれがあります。 – Defneit
@Defneit Pythonのドキュメントにそのような例があります。また、あなたの質問ではなく、コメントで質問する必要があります。 – Goyo