2012-01-17 10 views
4

PythonドキュメントのWindowsErrorを上げる私のためにそれがWindowsErrorを発生させ、しかしthatos.renameではなく、OSErrorの

os.rename(src, dst)

... On Windows, if dst already exists, OSError will be raised even if it is a file ...

言います。ドキュメントに間違いがありますか?

(より一般的な、しかし、上記の定式化の問題に触発さ)質問の第二部:

UPD私は申し訳ありませんが、質問の2番目の部分は間違っていました。 WindowsErrorは実際にはexcept OSErrorによって捕捉されます。

+3

サブクラスは、デフォルトでキャッチする必要があります。正確なコードと正確なエラーを投稿できますか? –

+1

'WindowsError'が' OSError:を除いて 'で捕まえられていないコードを表示し、Pythonのバグを表示します – wim

+0

' try'ブロックの外側で別のWindowsErrorが生成される可能性が高いと思います。 –

答えて

7

OSErrorはWindowsErrorのスーパークラスなので、OSErrorをキャッチするだけです。

FWIW、コア開発者は、ドキュメントによって約束されている最小限以上の例外を発生させることが自由です。

はまた、次のコードは、(WindowsXPの上で実行されているPython2.7.2)私のために正常に動作します:

try: 
    raise os.rename('nonexisting_file', 'def') 
except OSError: 
    print 'caught' 
+0

これは質問に答えません。 –

+3

@RobWouters確かにそうです。 OPはWindowsErrorの代わりにOSErrorが発生しているとドキュメントが誤っているかどうかを尋ねました。 OPはさらに、例外をキャッチする正しい方法が何であるかを尋ねました。OSErrorを捕まえるべきだと答えました。後の編集で、私は、Py2.7.2のテクニックがWinXP上でうまく動作していることも実証しました。 OPには他にもいくつかの問題があると思われるが、彼の尋ねられた質問には答えられた。 –

+0

ありがとうございました。私は二重チェックして、どこかに問題があるようだ。今私はその動作を再現することはできません。 – Misha

関連する問題