事先说明哦,这不是一篇关于Python异常的全面介绍的文章,这只是在学习Python异常后的一篇笔记式的记录和小结性质的文章。什么?你还不知道什么是异常,额...
1.Python异常类
Python是面向对象语言,所以程序抛出的异常也是类。常见的Python异常有以下几个,大家只要大致扫一眼,有个映像,等到编程的时候,相信大家肯定会不只一次跟他们照面(除非你不用Python了)。
异常 | 描述 |
NameError | 尝试访问一个没有申明的变量 |
ZeroDivisionError | 除数为0 |
SyntaxError | 语法错误 |
IndexError | 索引超出序列范围 |
KeyError | 请求一个不存在的字典关键字 |
IOError | 输入输出错误(比如你要读的文件不存在) |
AttributeError | 尝试访问未知的对象属性 |
ValueError | 传给函数的参数类型不正确,比如给int()函数传入字符串形 |
2. 例外のキャッチ
Python の完全な例外キャッチ ステートメントは次のようになります。
try:
try_suite
Exception1,Exception2, を除きます。 ..、引数:
例外スイート
... #その他の例外ブロック
else:
no_Exceptions_detected_suite
finally:
always_execute_suite
うーん...複雑ではないですか?もちろん、例外をキャッチしたい場合は、else ステートメントを完全に破棄する必要はありません。また、finally ステートメントも必要ありません。 Final ステートメントはそのままにしておきます。え、気を失った?さて、一つずつ説明しましょう。
2.1.try...Except... ステートメント
言うまでもなく、try_suite は例外をキャッチするために必要なコードです。キーとなるのは、Except ステートメントです。try がコード セグメント try_suite で例外をキャプチャした後、Except によって処理されます。
Try...Except ステートメントの最も単純な形式は次のとおりです。
try:
try_suite
例外:
例外ブロック
上記の else 句の後には、例外や例外パラメータが続かないため、try によってキャッチされた例外は、処理のために、Except 句の例外ブロックに渡されます。特定の例外を処理したい場合、たとえば、ゼロによる除算の例外のみを処理し、他の例外が発生した場合は、それらの例外を処理せずにスローする場合はどうすればよいでしょうか。このとき、例外パラメータをexcel句に渡す必要があります。 ExceptionN は、Exception 節に指定する例外クラスです (例外クラスの表を参照してください)。これは、このタイプの例外が捕捉された場合、この例外節によって処理されることを意味します。例:
try:
try_suite
例外:
例外ブロック
例:
>>> try:
... res = 2/ 0
...ZeroDivisionError を除く:
... print "エラー:除数はゼロであってはなりません!"
...
エラー:除数はゼロであってはなりません!
ほら、本当に ZeroDivisionError 例外をキャッチしました!では、複数の例外をキャッチして処理したい場合はどうすればよいでしょうか?方法は 2 つあり、1 つは複数の例外クラス パラメータを 1 つの例外句に渡す方法、もう 1 つは複数の例外句を記述し、各句で処理する例外クラス パラメータを渡す方法です。これら 2 つの用途は組み合わせて使用することもできます。例を挙げてみましょう。
try:
floatnum = float(raw_input("を入力してください) float:" ))
intnum = int(floatnum)
print 100/intnum
ZeroDivisionError を除く:
print "エラー: 1 以上の float num を入力する必要があります!"
以外 ValueError:
print "エラー: float 数値を入力する必要があります!"
[root@Cherish tmp]# python test.py
float:fjia を入力してください
エラー: float num を入力する必要があります!
[root@Cherish tmp]# python test.py
float:0.9999 を入力してください
エラー:1 以上の float num を入力する必要があります!
[root@Cherish tmp]# python test.py
float:25.091 を入力してください
4
上の例は誰でも一目で理解できるので、これ以上は説明しません。この例外は 1 つの例外、複数の例外、さらにはすべての例外を処理できることを誰もが理解している限り。
例外節の後の引数が何であるかをまだ説明していないことに気づいたかもしれません。心配しないで、聞いてください。この引数は実際には例外クラスのインスタンスであり (インスタンスが何であるか知らないとは言わないでください)、例外コードからの診断情報が含まれています。つまり、例外をキャッチすると、例外クラスのインスタンスを通じて例外に関する詳細情報を取得できます。例:
>>> try:
... 1/0
... except ZeroDivisionError,reason:
... pass
...
>>> type(reason)
>>> print reason
integer division or modulo by zero
>>> reason
ZeroDivisionError('integer division or modulo by zero',)
>>> reason.__class__
>>> reason.__class__.__doc__
'Second argument to a division or modulo operation was zero.'
>>> reason.__class__.__name__
'ZeroDivisionError'
上面这个例子,我们捕获了除零异常,但是什么都没做。那个reason就是异常类ZeroDivisionError的实例,通过type就可以看出。
2.2try ... except...else语句
现在我们来说说这个else语句。Python中有很多特殊的else用法,比如用于条件和循环。放到try语句中,其作用其实也差不多:就是当没有检测到异常的时候,则执行else语句。举个例子大家可能更明白些:
>>> import syslog
>>> try:
... f = open("/root/test.py")
... except IOError,e:
... syslog.syslog(syslog.LOG_ERR,"%s"%e)
... else:
... syslog.syslog(syslog.LOG_INFO,"no exception caught\n")
...
>>> f.close()
2.3 finally子句
finally子句是无论是否检测到异常,都会执行的一段代码。我们可以丢掉except子句和else子句,单独使用try...finally,也可以配合except等使用。
例如2.2的例子,如果出现其他异常,无法捕获,程序异常退出,那么文件 f 就没有被正常关闭。这不是我们所希望看到的结果,但是如果我们把f.close语句放到finally语句中,无论是否有异常,都会正常关闭这个文件,岂不是很 妙
>>> import syslog
>>> try:
... f = open("/root/test.py")
... except IOError,e:
... syslog.syslog(syslog.LOG_ERR,"%s"%e)
... else:
... syslog.syslog(syslog.LOG_INFO,"no exception caught\n")
... finally:
>>> f.close()
大家看到了没,我们上面那个例子竟然用到了try,except,else,finally这四个子句!:-),是不是很有趣?到现在,你就基本上已经学会了如何在Python中捕获常规异常并处理之。
3.两个特殊的处理异常的简便方法
3.1断言(assert)
什么是断言,先看语法:
assert expression[,reason]
其中assert是断言的关键字。执行该语句的时候,先判断表达式expression,如果表达式为真,则什么都不做;如果表达式不为真,则抛出异常。reason跟我们之前谈到的异常类的实例一样。不懂?没关系,举例子!最实在!
>>> assert len('love') == len('like')
>>> assert 1==1
>>> assert 1==2,"1 is not equal 2!"
Traceback (most recent call last):
File "
AssertionError: 1 is not equal 2!
我们可以看到,如果assert后面的表达式为真,则什么都不做,如果不为真,就会抛出AssertionErro异常,而且我们传进去的字符串会作为异常类的实例的具体信息存在。其实,assert异常也可以被try块捕获:
>>> try:
... assert 1 == 2 , "1 is not equal 2!"
... except AssertionError,reason:
... print "%s:%s"%(reason.__class__.__name__,reason)
...
AssertionError:1 is not equal 2!
>>> type(reason)
3.2. コンテキスト管理 (ステートメントあり)
共有リソース (ファイル、データなど) の一意の割り当てを確保するためだけに try、excel、finally のコードを使用し、タスクの終了後に解放する場合は、幸いです。 !この with ステートメントを使用すると、try、excel、finally から解放されます。構文は次のとおりです:
with context_expr [as var]:
with_suite
分からないの?それは普通のことです、例を挙げてください!
>>> with open('/root/test. py') as f:
... for line in f:
... print line
上記のコード行は何をするのでしょうか?
(1) ファイル /root/test.py を開きます
(2) ファイルオブジェクトを f
に代入します (3) ファイルの全行を出力します
(4) の有無は関係ありませんコード内の例外として、Python がこのファイルを閉じてくれるので、これらの詳細を気にする必要はありません。
さて、with ステートメントを使用してこれらの共有リソースを使用すれば、何らかの理由で解放されないことを心配する必要がないことが理解できましたか。ただし、すべてのオブジェクトが with ステートメントを使用できるわけではありません。コンテキスト管理プロトコルをサポートするオブジェクトだけがこのプロトコルをサポートします。次の表に示すように:
ファイル
10 進数.Context
threading.LockType
threading.Lock
threading.RLock
threading.Condition
threading.Semaphore
threading.BoundedSemaphore
コンテキスト管理プロトコルが何であるかについては、どのように使用するか、どのオブジェクトが使用できるかだけを気にしなければ、この問題はあまり気にしません:)
4. 例外をスローする (レイズ)
作成したプログラムで積極的に例外をスローしたい場合はどうすればよいでしょうか? raise ステートメントは、目標を達成するのに役立ちます。その基本的な構文は次のとおりです:
raise [SomeException [, args [,traceback]]
最初のパラメーター SomeException は例外クラス、または例外クラスのインスタンスである必要があります。
2 番目のパラメーターは SomeException に渡されるパラメーターであり、タプルである必要があります。このパラメータは、この例外に関する有用な情報を渡すために使用されます。
3 番目のパラメーター トレースバックはほとんど使用されません。主に追跡レコード オブジェクト (トレースバック) を提供するために使用されます。
以下にいくつかの例を示します。
>>> raise NameError
Traceback (最新) call last) :
ファイル "
NameError
>>> raise NameError() #例外クラスのインスタンス
Traceback (最新の呼び出し last):
ファイル "
NameError
>>> raise NameError,("名前エラーがあります", "in test .py")
トレースバック (最新の呼び出しは最後):
ファイル "
> の行 1、
>>>> raise NameError(" There is a name error","in test.py") #上記の例との違いに注意してください
Traceback (most last call last):
File "
NameError: ('名前エラーがあります', 'test.py')
>>> raise NameError,NameError("名前エラーがあります", "test.py ") # 上記の例との違いに注意してください
Traceback (most last call last):
File "
NameError: ('名前エラー' 、'test.py 内')
実際、最も一般的に使用されるのは、例外の種類を示す最初のパラメーターのみを渡し、説明情報を与えるために最大 1 つのタプルを渡すことです。上の 3 番目の例のように。
5. 例外と sys モジュール
例外情報を取得するもう 1 つの方法は、sys モジュールの exc_info() 関数を使用することです。この関数はトリプルを返します: (例外クラス、例外クラスのインスタンス、その後にレコード オブジェクト)
>>> try:
... 1/0
... 例外:
... import sys
... タプル = sys.exc_info ()
...
>>> print tuple
(
>>> for i in tuple:
... print i
...
#Traceback オブジェクト

Tomergelistsinpython、あなたはオペレーター、extendmethod、listcomfulting、olitertools.chain、それぞれの特異的advantages:1)operatorissimplebutlessforlargelist;

Python 3では、2つのリストをさまざまな方法で接続できます。1)小さなリストに適したオペレーターを使用しますが、大きなリストには非効率的です。 2)メモリ効率が高い大規模なリストに適した拡張方法を使用しますが、元のリストは変更されます。 3)元のリストを変更せずに、複数のリストをマージするのに適した *オペレーターを使用します。 4)Itertools.chainを使用します。これは、メモリ効率が高い大きなデータセットに適しています。

Join()メソッドを使用することは、Pythonのリストから文字列を接続する最も効率的な方法です。 1)join()メソッドを使用して、効率的で読みやすくなります。 2)サイクルは、大きなリストに演算子を非効率的に使用します。 3)リスト理解とJoin()の組み合わせは、変換が必要なシナリオに適しています。 4)redoce()メソッドは、他のタイプの削減に適していますが、文字列の連結には非効率的です。完全な文は終了します。

pythonexexecutionistheprocessoftransforningpythoncodeintoexecutabletructions.1)interpreterreadSthecode、変換intobytecode、thepythonvirtualmachine(pvm)executes.2)theglobalinterpreeterlock(gil)管理委員会、

Pythonの主な機能には次のものがあります。1。構文は簡潔で理解しやすく、初心者に適しています。 2。動的タイプシステム、開発速度の向上。 3。複数のタスクをサポートするリッチ標準ライブラリ。 4.強力なコミュニティとエコシステム、広範なサポートを提供する。 5。スクリプトと迅速なプロトタイピングに適した解釈。 6.さまざまなプログラミングスタイルに適したマルチパラダイムサポート。

Pythonは解釈された言語ですが、コンパイルプロセスも含まれています。 1)Pythonコードは最初にBytecodeにコンパイルされます。 2)ByteCodeは、Python Virtual Machineによって解釈および実行されます。 3)このハイブリッドメカニズムにより、Pythonは柔軟で効率的になりますが、完全にコンパイルされた言語ほど高速ではありません。

useaforloopwhenteratingoverasequenceor foraspificnumberoftimes; useawhileloopwhentinuninguntinuntilaConditionismet.forloopsareidealforknownownownownownownoptinuptinuptinuptinuptinutionsituations whileoopsuitsituations withinterminedationations。

pythonloopscanleadtoErrorslikeinfiniteloops、ModifiningListsDuringiteration、Off-Oneerrors、Zero-dexingissues、およびNestededLoopinefficiencies.toavoidhese:1)use'i


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。
