この記事の例では、Python の例外とファイル処理メカニズムについて説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
1 例外処理
Python の例外は
try
Except
finally
で処理されます。そして、excel の後に else.
を続けることもできます。例外を発生させるには、raise を使用します
スローされた例外が処理されない場合、実際の Python プログラムの実行中にいくつかの赤い情報が表示され、プログラムが終了します。 before:
In Dictionary で使用されているキーが存在しない場合、KeyError 例外が発生します。例:
>>> d = {"a":1, "b":"abc"} >>> d["c"] Traceback (most recent call last): File "<interactive input>", line 1, in <module> KeyError: 'c'
検索リストに存在しない値は、ValueError 例外が発生します。例:
>>> li = [1,2] >>> li.index(3) Traceback (most recent call last): File "<interactive input>", line 1, in <module> ValueError: list.index(x): x not in list
に対応します。添字が範囲外になると、IndexError 例外が生成されます。
存在しないメソッドを呼び出すと、AttributeError 例外が発生します。
強制変換を行わずにデータ型を混合すると、Exception が発生します。ファイル操作エラーによる
IOError の例:>>> li[2] Traceback (most recent call last): File "<interactive input>", line 1, in <module> IndexError: list index out of range上記のコードでは、 open が使用され、ファイル オブジェクトを返します。指定された例外がキャッチされない場合、else ステートメントが実行されます。 モジュールが存在しない場合は、独自の例外を定義することもできます。例外クラスを定義するときは、組み込みの Exception クラスを継承させます。その後、例外をスローする必要がある場合は、 raise を使用します。ファイルを開き、ファイル オブジェクトを返します。その関数は次のように宣言されます:
try: fsock = open("/notthere") except IOError: print "The file dose not exits..." else: print "open the file." print "this line will always print"には 3 つのパラメータがあります (最後の 2 つはオプションです)。たとえば、次のようになります。
open(name[, mode[, buffering]])
2 番目のパラメータは、「rb」として指定されます。このパラメータがデフォルトの場合、ファイルをテキスト モードで開くことを意味します。
開けない場合は、開くことができます。 IOError 例外を発生させます。 これで、ファイル オブジェクトの name 属性と mode 属性を使用してそれらをクエリできるようになります。例:
>>> f = open("/music/_singles/kairo.mp3", "rb")ファイルを開いた後、例:
を読み書きできます。
>>> f.name '/music/_singles/kairo.mp3' >>> f.mode 'rb'現在の場所をクエリします。
>>> f.tell()最初のパラメータは、0、1、2 の 3 つの値をとります。 検索されたアドレスが正しくない場合 (範囲を超えるなど)、IOError 例外が発生します。そのため、このステートメントはファイル ポインターをファイルの末尾に配置します。
0 >>> f.seek(0, 2)これはファイルの長さを出力します。
>>> f.tell()ファイルの最後の 128 バイトを読み取り、データを読み取るときに、ファイル ポインタも後方に移動します。 . read のパラメータは、読み込む最大バイト数を示します。このパラメータは、常にファイルの最後まで読み込むことを意味します。読み込み中にエラーが発生した場合。ディスク上にある場合、またはネットワークが切断されている場合)、IOError 例外が発生します。
>>> f.seek(-128, 2) >>> data = f.read(128)ファイルが閉じられているかどうかを確認してください。
>>> f.closedファイルは、使用されなくなったら閉じる必要があります。すでに閉じたファイルを再度閉じることができます(例外は発生しません)。
False >>> f.close()閉じた後にfに対してseek()などの操作を行うと、ValueError例外が発生します。
ファイルの書き込み方法は、ただし、ファイルが「書き込み」用に開かれている必要があります。例:
>>> f.closed True
この場合、ファイルが存在しない場合でも、「w」は書き込み用に開くことを意味します。存在する場合は、既存のファイルが上書きされます。
>>> f1 = open('test.log', 'w')
file() でファイルを開くことは、open() で開くことと同じです。 Python の
3 for ループ
。for はリストを走査するために使用されます。例:>>> f1.write('abc') >>> f1.close() >>> file('test.log').read()
これにより、ループ内で li の要素の値を順番に受け取ることができます。 .
... print i
...1
23
この出力は print "n".joni(li) と同じです。
他の言語のようにカウントに for を使用したい場合。次のメソッドを使用できます:>>> li = [1, 2, 3] >>> for i in li:
辞書を走査するには次のように:
>>> for i in range(len(li)) : print li[i] ... 1 2 3上記の結果を出力し、 "n".join(["%d = %) s" % (k, v) for k, v in d.items()] ) 同じです。
4 sys.modules の使用
Python では、 modules は sys モジュールで定義されたグローバル辞書オブジェクトです。
モジュールをインポートすると、sys.modules で見つかります。
>>> d = {1:"abc", 2:"def"} >>> for k, v in d.items() : print "%d = %s" % (k, v) ... 1 = abc 2 = def
など。
这个join函数用来将一个或多个字符串构造成一个路径名.
'c:\music\mahadeva.mp3' >>> os.path.expanduser("~")
expanduser函数用'~'作参数时. 返回当前用户根目录.
'c:\Documents and Settings\mpilgrim\My Documents'
>>> (filepath, filename) = os.path.split("c:\music\a.mp3")
split函数用来将一个路径名分成目录名和文件名. 它返回的是一个tuple. 用返回的tuple对(filepath, filename)赋值.
>>> filepath 'c:\music' >>> filename 'a.mp3' >>> (a, b) = os.path.splitext("a.mp3")
类似的. 这个splitext用来将一个全文件名分成 文件名 和 扩展名 两部分.
>>> a 'a' >>> b '.mp3'
列出目录用:
>>> os.listdir("c:\")
这个函数将返回一个字符串list. 包括所有的文件和文件夹的名字.
['boot.ini', 'CONFIG.SYS', 'AUTOEXEC.BAT', 'java', 等]
要判断一个字符串路径到底是一个文件还是一个文件夹. 用os.path模块中的 isfile() 或 isdir(). 如:
>>> [f for f in os.listdir("c:") if os.path.isdir(os.path.join("c:", f))]
这样就打印出c中所有文件夹名构成的list.
如果要在目录操作中使用通配符. 可以如下:
>>> import glob
要先导入 glob 模块
>>> glob.glob('c:\music\*.mp3')
则返回的list中包含了该目录下所有的 .mp3 后缀的文件名.
更多python异常和文件处理机制相关文章请关注PHP中文网!