Python 2.7 基本チュートリアル: エラーと例外
.. _tut-errors:
====================================
エラーと例外エラーと例外
==================================
これまで、エラー メッセージはこれ以上ありませんでした。ただし、例を試したことがあるなら、おそらくいくつか見たことがあるでしょう。*構文エラー* と *例外* という、(少なくとも) 2 つの区別可能なエラーがあります。
これ以上の説明はありません。メッセージですが、
が実験した例の中でいくつかのメッセージに遭遇した可能性があります。 Python には (少なくとも) 2 種類のエラーがあります: *構文エラー* と *例外*
。
.. _tut-syntaxerrors:
構文エラー 構文エラー
========================
構文エラー、解析エラーとも呼ばれますおそらく、Python を学習中に最も一般的な種類の
苦情です。
文法エラー (解釈エラーとも呼ばれます) は、Python を学習中に最も一般的な種類の
苦情かもしれません。 :
>>> while True print 'Hello world'
'File "
' while True print 'Hello world'
' ' ' ^
' SyntaxError: 無効な構文
パーサーは問題のある行を繰り返し、エラーが検出された行の最も古い点を指す小さな「矢印」を表示します
エラーの原因は
です。矢印の*前にあるトークン:
の例では、キーワード:keyword:`print`でエラーが検出されます。これは、その前にコロン
(``':'``)が欠落しているためです。行番号が出力されるので、入力がスクリプトからのものである場合にどこを見るべきかがわかります
パーサーはエラーのある行を繰り返し、その行で見つかった最も早いエラーに小さな「矢印」を表示します。エラー
(少なくとも検出されたエラー) は、矢印が指す場所*で発生します。この例のエラーは、キーワード
:keyword:`print` の前にコロン ( ``':'`` ) が欠落しているために表示されます。ファイル名と行番号も表示されるので、
どのスクリプトからエラーが発生し、どこにエラーがあるのかを知ることができます。
.. _tut-Exceptions:
Exceptions
==========
ステートメントや式が構文的に正しい場合でも、それを実行しようとすると
エラーが発生する可能性があります実行中に検出されたエラー
は *例外* と呼ばれ、無条件に致命的というわけではありません。ただし、ほとんどの例外は
プログラムでは処理されず、次のようなエラー メッセージが表示されます。ここに示されています:
ステートメントが文法的に完全に正しい場合でも、それを実行しようとするとエラーが発生する可能性があります。プログラムの実行中に検出されたエラーは例外と呼ばれ、通常は致命的な問題を引き起こすことはありません。Python プログラムでエラーを制御する方法はすぐに学びます。ほとんどの例外はプログラムによって処理されませんが、エラー メッセージが表示されます::
>>> 10 * (1/0)
トレースバック (最新の呼び出し最後):
ファイル "< ;stdin> ;"、1 行目、?
ZeroDivisionError: 整数除算またはゼロによる剰余
>>> 4 + スパム*3
トレースバック (最新の呼び出し最後の):
ファイル " NameError: 名前 'spam' が定義されていません >>> '2' + 2 トレースバック (最新の呼び出し最後): ファイル " TypeError: 'str' と 'int' オブジェクトを連結できません エラー メッセージの最後の行は、例外がさまざまな型で発生することを示しており、その型はメッセージの一部として出力されます。 : のタイプ 例は、:exc:`ZeroDivisionError`、:exc:`NameError`、および :exc:`TypeError` です。 例外タイプとして出力される文字列は、組み込み例外の名前です これはすべての組み込み例外に当てはまりますが、ユーザー定義の例外には当てはまりません (これは便利な規則ですが)。 エラー メッセージの最後の行は、どのようなエラーが発生したかを示します。例外にもさまざまなタイプがあり、例外タイプはエラー メッセージの一部として表示されます。例の例外は、ゼロ除算エラー ( :exc:`ZeroDivisionError` )、ネーミング エラー ( :exc:`NameError`)、およびタイプ エラー ( :exc:`TypeError` )。エラー情報を出力するとき、例外タイプは例外の組み込み名として使用されます ショー。これはすべての組み込み例外に当てはまりますが、ユーザー定義の例外には必ずしも当てはまりません (ただし、これは便利な規則です)。標準例外名は組み込みの識別子です (予約されたキーワードはありません)。 行の残りの部分は、例外の種類とその原因 に基づいた詳細を提供します。 行の最後の部分は、例外の種類の詳細な説明です。つまり、その内容は例外の種類によって異なります。 エラー メッセージの前の部分には、例外 が発生したコンテキストがスタック トレースバックの形式で表示されます。ただし、ソース行をリストするスタック は表示されません。 同じ :keyword:`try` ステートメント内で発生した例外、他の句で発生した例外は処理されません 。例:: ... 例外 (RuntimeError, TypeError, NameError): ... pass 最後の例外句では、例外名を省略できます。ワイルドカードとして機能します この方法では実際のプログラミング エラーを簡単にマスクできるため、細心の注意を払って使用してください また、エラー メッセージを出力してから例外を再発生させるために使用することもできます (呼び出し元も同様に例外を処理できるようにします): 最後の else 句では例外名を省略し、ワイルドカードとして使用できます。この方法は、実際のプログラム エラーを隠して発見できなくなる可能性があるため、慎重に使用してください。また、エラー情報の行を出力し、例外を再スローするために使用することもできます (これにより、呼び出し元が例外をより適切に処理できるようになります):: import sys try: f = open('myfile.txt') s = f.readline() i = int(s.strip()) ただし、IOError as (errno, strerror): print "I/O エラー({0}): {1}" .format(errno, strerror) 例外 ValueError: print "データを整数に変換できませんでした。" 例外: print "予期しないエラー:", sys.exc_info()[0] に格納されている引数 ... 印刷インストprint ' y =', y ... ('スパム', '卵') ('スパム', '卵') x = スパム y = 卵 例外に引数がある場合、それはハンドルされない例外のメッセージ の最後の部分 (「詳細」) として出力されます。 ハンドルされない例外の場合、引数があります。これは、エラー メッセージ (「詳細」) の最後の部分として出力されます。 例外ハンドラーは、例外が try句で即座に発生した場合にのみ処理するのではなく、try句で(間接的にであっても)呼び出される関数内で例外が発生した場合にも処理します。例: 例外ハンドラ ではありません。 try 句で直接発生した例外のみを処理できます。呼び出された関数で例外が発生した場合でも (間接的であっても)、それを処理することもできます。例:: >>> def this_fails(): ... x = 1/0 ... >>> try: ... this_fails() ... 詳細として ZeroDivisionError を除く: ... print '実行時エラーの処理:'、detail ... 実行時エラーの処理: 整数の除算またはゼロによる剰余 .. _tut - raise: 例外の発生 例外のスロー ============================== :keyword:`raise`ステートメントを使用すると、プログラマは指定された 例外を強制的に発生させることができます。例: プログラマは、:keyword:`raise` ステートメントを使用して、指定された例外を強制的に発生させることができます。例:: >>> raise NameError('HiThere') トレースバック (最新の呼び出し最後): ファイル " NameError: HiThere :keyword:`raise` の唯一の引数は、発生する例外を示します。 これは、例外インスタンスまたは例外クラス (:class:`Exception` から派生 するクラス) である必要があります。 throw 発生した例外は、:keyword:`raise` の一意のパラメータによって識別されます。例外インスタンスまたは例外クラス (:class:`Exception` から継承されたクラス) である必要があります。 例外が発生したかどうかを判断する必要があるが、それを処理するつもりはない場合は、より単純な形式の :keyword:`raise` ステートメントを使用して、例外を 再発生させることができます。例外がスローされたかどうかを知る必要があるが、それを処理したくない場合は、:keyword:`raise` ステートメントを使用すると、例外を簡単に再スローできます。 >>> try: ... raise NameError('HiThere') ... 例外 NameError: ... print '例外が発生しました!' ... raise ... 例外が発生しました! トレースバック (最後の呼び出し): ファイル " NameError: HiThere .. _tut-userExceptions: ユーザー定義の例外 ユーザー定義の例外 ======================================= = プログラムは、新しい例外クラスを作成することで独自の例外に名前を付けることができます (Python クラスの詳細については、 :ref:`tut-classes` を参照してください)。例外は通常、:exc:`Exception` クラスから派生する必要があります。 例: プログラム内で新しい例外タイプを作成することで、独自の例外に名前を付けることができます (Python クラスの内容については、:ref:`tut-classes` を参照してください)。例外クラスは通常、 :exc:`Exception` クラスから直接または間接的に派生する必要があります。例:: >>> class MyError(Exception): ... def __init__(self, value ): A ... Self.value = Value ... def __Str __ (Self): ... Return Repr (Self.value) ... & gt; : : : : : : : : : : : : : ... raise MyError(2*2) ) ... MyError as e: を除く ... print '例外が発生しました、値:', e.value ... 例外が発生しました、値 : 4 トレースバック (最新の呼び出しは最後): ファイル " __main__.MyError: 'oops!' この例では、デフォルトの :meth:`__init__` は次のとおりです。 class:`Exception` がオーバーライドされました 。新しい動作は単に *value* 属性を作成するだけであり、*args* 属性を作成するデフォルトの動作を置き換えます。 この例では、:class:`Exception`デフォルトの :meth:`__init__` はオーバーライドされます。 value プロパティを簡単に作成する新しい方法。これは、*args* 属性を作成する元の方法を置き換えます。 例外クラスは、他のクラスが実行できることをすべて定義できますが、 は通常は単純に保たれ、多くの場合、例外のハンドラーによって エラーに関する情報を抽出できるようにする多数の属性のみを提供します。 G Self.msg = msg クラス遷移エラー (エラー): 「」は、操作が古くない状態遷移を試行するときに発生します。 遷移の始まり 次に -- 新しい状態を試みます self.msg = msg ほとんどの例外。標準例外の の名前と同様に、「Error」で終わる名前で定義されています。 " 最後に。 多くの標準モジュールは、定義した関数で発生する可能性のあるエラーを報告するための独自の例外を定義しています クラスの詳細については、 章:ref:`tut-classes` で説明されています。独自の例外を作成して、定義した関数で発生する可能性のあるエラーを報告します。クラスの詳細については、:ref:`tut-classes` の章を参照してください。 .. _tut-cleanup: クリーンアップ アクションの定義 クリーンアップ アクションの定義 ============================ ==== ====================== :keyword:`try` ステートメントには、クリーンアップを定義するための別のオプションの句があります For example: :keyword:`try` ステートメントには別のオプションの句があり、その目的は、どのような状況でも実行する必要がある関数 を定義することです。例:: >>> try: ... KeyboardInterrupt を発生させる ... 最後に: ... 「さようなら、世界!」を印刷します ... さようなら、世界! トレースバック (最新の呼び出しは最後): ファイル " KeyboardInterrupt :keyword:`try` を離れる前に *finally 句* が常に実行されます 例外が発生したかどうかを示すステートメント。 :keyword:`try` 句で例外が発生し、 :keyword:`excel` 句 (または、:keyword:`Except` または :keyword:`else` 句で発生した場合)、:keyword:`finally` 句の後に再生成されます :keyword:`finally` 節は、:keyword:`try` ステートメントの他の節が :keyword:`break`、:keyword を介して終了したときにも「途中で」実行されます 。 :` continue` または :keyword:`return` ステートメントのさらに複雑な例 (:keyword:`excel` と :keyword:`finally` 句がある 同じ :keyword:`try` ステートメントが機能します) Python 2.5): 例外が発生するかどうかに関係なく、プログラムが :keyword:`try` を終了した後に *finally 句* が常に実行されます。 :keyword:`Except` によってキャッチされない 例外が :keyword:`try` ステートメントで発生した場合 (または、それが :keyword:`Except` 句または :keyword:`else` 句で発生した場合)、 では:keyword:`finally` 句が実行された後に再スローされます。 :keyword:`try` ステートメントが :keyword:`break`、 :keyword:`Continue`、または :keyword:`return` によって終了した場合、 :keyword:`finally` 句も実行されます。これはより複雑な例です (同じ :keyword:`try` ステートメント内の :keyword:`excel` 節と :keyword:`finally` 節は Python 2.5 と同じように機能します)。 def Division(x, y): ... try: ... result = x / y ... ZeroDivisionError を除く: ... print "ゼロによる除算! "l ... Else : ... Print" 結果は ", Result ... 最後に: ... Print" 最後に句を実行しています " ... & gt ;> 1) 結果は2です finally句を実行しています >>>divide(2, 0) finally句を実行しています >> 、"1") finally句を実行しています トレースバック(最新の呼び出しは最後): ファイル " ファイル " TypeError: unsupported operand type(s) for /: 'str' and 'str' ご覧のとおり、:keyword:`finally` 句はどのようなイベントでも実行されます。 2 つの文字列を分割することによって発生した文字列は、 :keyword:`excel` 句では処理されないため、:keyword:`finally` 句が実行された後に再発生します。 ご覧のとおり、次のとおりです。キーワード:`finally` 句はどのような場合でも実行されます。 :exc:`TypeError` は 2 つの文字列が分割されたときにスローされ、:keyword:`excel` 節ではキャッチされないため、 :keyword:`finally` 節が実行された後に再スローされます。 実際のアプリケーションでは、:keyword:`finally` 句は、リソースの使用が成功したかどうかに関係なく 外部リソース (ファイルやネットワーク接続など) を解放する場合に便利です。アプリケーション アプリケーションでは、使用中にエラーが発生したかどうかに関係なく、外部リソース (ファイル やネットワーク接続など) を解放するために、:keyword:`finally` 句が使用されます。 .. _tut-cleanup-with: 事前定義されたクリーンアップアクション ============================ === ========================= 一部のオブジェクトでは、オブジェクト が不要になったときに実行される標準のクリーンアップ アクションが定義されています。オブジェクト を使用した操作が成功したか失敗したか。次の例を見てください。ファイル を開いてその内容を画面に出力しようとしています。 一部のオブジェクトは、オブジェクトの操作が成功したかどうかに関係なく、オブジェクトが不要になったときに有効になります。次の例では、ファイルを開いてその内容を画面に出力しようとします。 :: for line in open("myfile.txt"): print line このコードの問題は、コードの実行が終了した後、一定時間ファイルを開いたままにしてしまうことです。 単純なスクリプトでは問題になりませんが、 :keyword:`with` ステートメントを使用すると、ファイルなどのオブジェクトが常に迅速にクリーンアップされるように することができます。 : このコードの問題は、コードの実行後、開いているファイルがすぐに閉じられないことです。これは単純なスクリプト では問題ありませんが、大規模なアプリケーションでは問題が発生する可能性があります。 :keyword:`with` ステートメントを使用すると、ファイルなどのオブジェクトをタイムリーかつ正確な方法でクリーンアップできます。 :: with open("myfile.txt") as f: for line in f: print line ステートメントの実行後、たとえ 問題が発生したとしても、ファイル *f* は常に閉じられます。 事前定義されたクリーンアップ アクションを提供する他のオブジェクトでは、 ステートメントの実行後、データの処理中にエラーが発生した場合でも、ファイル *f* は常に閉じられます。ファイル。 他のオブジェクトが事前定義されたクリーニング動作を提供する場合は、そのドキュメントを確認してください。 上記は Python 2.7 の基本的なチュートリアルです: エラーと例外 その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

Pytorch GPUアクセラレーションを有効にすることで、CentOSシステムでは、PytorchのCUDA、CUDNN、およびGPUバージョンのインストールが必要です。次の手順では、プロセスをガイドします。CUDAおよびCUDNNのインストールでは、CUDAバージョンの互換性が決定されます。NVIDIA-SMIコマンドを使用して、NVIDIAグラフィックスカードでサポートされているCUDAバージョンを表示します。たとえば、MX450グラフィックカードはCUDA11.1以上をサポートする場合があります。 cudatoolkitのダウンロードとインストール:nvidiacudatoolkitの公式Webサイトにアクセスし、グラフィックカードでサポートされている最高のCUDAバージョンに従って、対応するバージョンをダウンロードしてインストールします。 cudnnライブラリをインストールする:

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

MINIOオブジェクトストレージ:CENTOSシステムの下での高性能展開Minioは、Amazons3と互換性のあるGO言語に基づいて開発された高性能の分散オブジェクトストレージシステムです。 Java、Python、JavaScript、Goなど、さまざまなクライアント言語をサポートしています。この記事では、CentosシステムへのMinioのインストールと互換性を簡単に紹介します。 Centosバージョンの互換性Minioは、Centos7.9を含むがこれらに限定されない複数のCentosバージョンで検証されています。

Pytorchの分散トレーニングでは、Centosシステムでトレーニングには次の手順が必要です。Pytorchのインストール:PythonとPipがCentosシステムにインストールされていることです。 CUDAバージョンに応じて、Pytorchの公式Webサイトから適切なインストールコマンドを入手してください。 CPUのみのトレーニングには、次のコマンドを使用できます。PipinstalltorchtorchtorchvisionTorchaudioGPUサポートが必要な場合は、CUDAとCUDNNの対応するバージョンがインストールされ、インストールに対応するPytorchバージョンを使用してください。分散環境構成:分散トレーニングには、通常、複数のマシンまたは単一マシンの複数GPUが必要です。場所

PytorchをCentosシステムにインストールする場合、適切なバージョンを慎重に選択し、次の重要な要因を検討する必要があります。1。システム環境互換性:オペレーティングシステム:Centos7以上を使用することをお勧めします。 Cuda and Cudnn:PytorchバージョンとCudaバージョンは密接に関連しています。たとえば、pytorch1.9.0にはcuda11.1が必要ですが、pytorch2.0.1にはcuda11.3が必要です。 CUDNNバージョンは、CUDAバージョンとも一致する必要があります。 Pytorchバージョンを選択する前に、互換性のあるCUDAおよびCUDNNバージョンがインストールされていることを確認してください。 Pythonバージョン:Pytorch公式支店

NGINXのインストールをインストールするには、次の手順に従う必要があります。開発ツール、PCRE-Devel、OpenSSL-Develなどの依存関係のインストール。 nginxソースコードパッケージをダウンロードし、それを解凍してコンパイルしてインストールし、/usr/local/nginxとしてインストールパスを指定します。 nginxユーザーとユーザーグループを作成し、アクセス許可を設定します。構成ファイルnginx.confを変更し、リスニングポートとドメイン名/IPアドレスを構成します。 nginxサービスを開始します。依存関係の問題、ポート競合、構成ファイルエラーなど、一般的なエラーに注意する必要があります。パフォーマンスの最適化は、キャッシュをオンにしたり、ワーカープロセスの数を調整するなど、特定の状況に応じて調整する必要があります。
