2012-09-11 13 views
8

在Iron Python中執行chdir命令時,出現「路徑中存在非法字符」錯誤。這發生在我的代碼運行時,但即使在Iron Python控制檯中也有這個問題。我正在使用nt模塊,因爲在代碼中os模塊不起作用(似乎是一個已知問題)。爲什麼Python(IronPython)在使用單詞bi​​n時報告「路徑中存在非法字符」?

做一點點玩耍,結果證明「非法字符」其實就是單詞bin。以下是來自控制檯的文本,僅當我導航到bin目錄時才顯示出錯。

這裏是例子

>>> nt.chdir('c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx') 
>>> nt.chdir('c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx\Directory') 
>>> nt.chdir('c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx\Directory\bin') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: Illegal characters in path. 

請告訴我更糟糕的是,我會導航到一個完全不同的目錄(甚至沒有一個bin目錄),並嘗試導航到一個子目錄的「bin」和我'仍然會得到那個錯誤!

任何想法?

回答

14

\ path separator也是一個python轉義字符。他們的兩倍,或者更好的是,使用r''生蟒蛇文字來代替:

r'c:\Users\xxxxx\Documents\Visual Studio 2010\Projects\xxx' 
'c:\\Users\\xxxxx\\Documents\\Visual Studio 2010\\Projects\\xxx' 

例如,\n是一個換行符,並\t被解釋爲TAB。在您的具體情況下,\b被解釋爲退格。

+0

DOH中有很好的評論。我知道... 我想它只是碰巧,它可以逃脫所有這些特殊的字符,除了B .....謝謝! – Mike

5

\是Python字符串中的轉義字符。 \b是backspace,這就是爲什麼它在\bin上的barf:你沒有指定目錄Directory\bin,你指定的目錄Directory<backspace>in,這是不合法的路徑,即使它不存在。

您可以通過加倍反斜槓或使用Martijn建議的r指示符來編寫字符串。第三種方法是簡單地像其他文明操作系統一樣使用正斜槓。 Windows非常樂意使用這些。

+0

+1爲「文明」。 – lvc

+0

+1教我的Windows(我很高興地可以避免大部分時間)現在接受'/'路徑分隔符像一個正常的操作系統。 –

+0

我從不使用Windows路徑。我實際上並不是自己生成路徑,而是使用.Net Path類創建「平臺特定路徑」。 所以很顯然它會在Windows上的行爲不同於Linux(我的首選)。很明顯,你會得到類似這樣的問題,我現在必須通過這個問題,正如你明確指出的那樣,Windows不僅僅是關節拖拽,而是一般的糟糕的操作系統。 – Mike

1

Windows和大多數其他操作系統將識別正斜槓。所以,不用反斜槓,雙反斜槓或r''(更多關於字符串文字here),您可以使用正斜槓,並且您可以輕鬆前往。答案here也很詳細。

更新:PS:請謹慎使用反斜槓和字符串文字。總是檢查你的具體情況。在這個answer

+0

在任何情況下,Windows實際上都不是這樣。窗口中有許多應用程序,需要用於路徑。只要打開一個命令提示符,輸入「copy ./directory/file.txt ./locationdir」即可看到我的意思。 – Mike

+0

@Mike:你一定是對的。我絕對同意,即使在Windows中,這也無法百分之百地工作。瘋狂如何沒有什麼是完全通用的,當涉及到操作系統。東東。 我還從我在我的回覆中鏈接到的答案中讀到:「所以原始字符串不是100%原始的,仍然有一些基本的反斜槓處理。」 – Alain

+0

上面的回覆與「所有其他文明操作系統」。我認爲適用。 Windows有一種無意義的設計,對用戶,商業人士和開發人員都不利。我儘可能在Linux上做盡可能多的開發,以避免這種情況。我需要保持對Windows中未被接受的位置的理解,因爲另一個人和我一次又一次地碰到這個。 – Mike

相關問題