Python 例外とファイル処理メカニズム

高洛峰
リリース: 2017-02-28 16:33:13
オリジナル
1383 人が閲覧しました

この記事の例では、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: &#39;c&#39;
ログイン後にコピー

検索リストに存在しない値は、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
&#39;/music/_singles/kairo.mp3&#39;
>>> f.mode
&#39;rb&#39;
ログイン後にコピー

現在の場所をクエリします。

>>> 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(&#39;test.log&#39;, &#39;w&#39;)
ログイン後にコピー

file() でファイルを開くことは、open() で開くことと同じです。 Python の

3 for ループ

。for はリストを走査するために使用されます。例:

>>> f1.write(&#39;abc&#39;)
>>> f1.close()
>>> file(&#39;test.log&#39;).read()
ログイン後にコピー

これにより、ループ内で li の要素の値を順番に受け取ることができます。 .

... print i

...

1

2

3

この出力は 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 で見つかります。

すべてのクラスには組み込みの「クラス属性」があります: __module__ 。その値は、クラスを定義するモジュールの名前です。


5ファイルとディレクトリを操作するための os.path 関数によって参照されるモジュールがいくつかあります。

>>> d = {1:"abc", 2:"def"}
>>> for k, v in d.items() : print "%d = %s" % (k, v)
...
1 = abc
2 = def
ログイン後にコピー

など。

这个join函数用来将一个或多个字符串构造成一个路径名.

&#39;c:\music\mahadeva.mp3&#39;
>>> 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
&#39;c:\music&#39;
>>> filename
&#39;a.mp3&#39;
>>> (a, b) = os.path.splitext("a.mp3")
ログイン後にコピー

类似的. 这个splitext用来将一个全文件名分成 文件名 和 扩展名 两部分.

>>> a
&#39;a&#39;
>>> b
&#39;.mp3&#39;
ログイン後にコピー

列出目录用:

>>> os.listdir("c:\")
ログイン後にコピー

这个函数将返回一个字符串list. 包括所有的文件和文件夹的名字.

[&#39;boot.ini&#39;, &#39;CONFIG.SYS&#39;, &#39;AUTOEXEC.BAT&#39;, &#39;java&#39;, 等]
ログイン後にコピー

要判断一个字符串路径到底是一个文件还是一个文件夹. 用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(&#39;c:\music\*.mp3&#39;)
ログイン後にコピー

则返回的list中包含了该目录下所有的 .mp3 后缀的文件名.

更多python异常和文件处理机制相关文章请关注PHP中文网!

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート