2012-01-17 59 views
4

Python文檔說thatos.rename在Windows上提高WindowsError而不是OSERROR

os.rename(src, dst)

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

但是,對我來說它提出WindowsError。文檔中有錯誤嗎?

問題的第二部分(更普遍的,而是由上面制定的問題啓發):

UPD我很抱歉,這個問題的第二部分是不正確的。 WindowsError的確如它應該那樣被except OSError捕獲。

+3

子類應在默認情況下被捕獲。你能發佈你的確切代碼和確切的錯誤? – 2012-01-17 05:23:48

+1

向我展示一個'WindowsError'沒有被''除了OSError之外'捕獲的代碼:'並且我會告訴你一個python中的bug – wim 2012-01-17 05:42:51

+0

我認爲很可能在'try'塊之外引發一個單獨的WindowsError。 – 2012-01-17 05:45:24

回答

7

因爲OSError是WindowsError的超類,所以趕上OSError

FWIW,核心開發者可以自由提出比文檔承諾的最低限度更具體的異常。

此外,下面的代碼工作正常,我(Python2.7.2上的WindowsXP上運行):

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

這不回答這個問題。 – 2012-01-17 05:45:15

+3

@RobWouters確實如此。 OP問他們是否說他們說OSError被引發而不是WindowsError時文檔是錯誤的,我回答說這是允許的。 OP進一步詢問了捕獲異常的正確方法,我回答說他應該捕獲OSError。通過後面的編輯,我也證明了Py2.7.2技術在WinXP上工作正常。 OP也可能有其他一些問題,但他提出的問題得到了回答。 – 2012-01-17 06:31:15

+0

謝謝你的回答。我仔細檢查過,似乎在其他地方有問題。現在我不能再現這種行爲。 – Misha 2012-01-17 07:00:42

相關問題