2012-02-19 7 views
6

我有我的Python程序中的保存功能,看起來像這樣:爲什麼Python在不應該給我「一個整數是必需的」?

def Save(n): 
    print("S3") 
    global BF 
    global WF 
    global PBList 
    global PWList 
    print(n) 
    File = open("C:\KingsCapture\Saves\\" + n + "\BF.txt", "w") 
    pickle.dump(BF, File) 
    File = open("C:\KingsCapture\Saves\\" + n + "\WF.txt", "w") 
    pickle.dump(WF, File) 
    File = open("C:\KingsCapture\Saves\\" + n + "\PBList.txt", "w") 
    pickle.dump(PBList, File) 
    File = open("C:\KingsCapture\Saves\\" + n + "\PWList.txt", "w") 
    pickle.dump(PWList, File) 

這裏,n爲 「1」。

我得到看起來像這樣的錯誤:

File "C:/Python27/KingsCapture.py", line 519, in Save 
    File = open("C:\KingsCapture\Saves\\" + n + "\BF.txt", "w") 
TypeError: an integer is required 

在外殼內做同樣的負載,我沒有得到任何錯誤:

>>> File = open("C:\KingsCapture\Test\List.txt", "r") 
>>> File = open("C:\KingsCapture\Test\List.txt", "w") 
>>> n = "1" 
>>> File = open("C:\KingsCapture\Saves\\" + n + "\BF.txt", "r") 
>>> File = open("C:\KingsCapture\Saves\\" + n + "\BF.txt", "w") 

這是爲什麼有問題?

+0

將'print(n)'改爲'print(repr(n),type(n))'。輸出可能是有啓發性的。 – zwol 2012-02-19 23:17:01

+1

在Python中'UpperCase'用於類,'lower_case'用於變量。 – katrielalex 2012-02-19 23:21:29

回答

12

您可能沒有從os模塊明星導入:

>>> open("test.dat","w") 
<open file 'test.dat', mode 'w' at 0x1004b20c0> 
>>> from os import * 
>>> open("test.dat","w") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: an integer is required 

所以你使用錯誤的打開功能。 (我想你可以簡單地完成from os import open,但那不太可能。)通常應該避免這種進口風格,在實際情況下應該使用global

+0

+1,或者可能只是認爲''從os導入open'是必要的 – 2012-02-19 23:24:24

+0

@gnibbler:我只是在編輯評論這個,但是你打敗了我。 :^) – DSM 2012-02-19 23:25:54

+0

就是這樣,謝謝。由於之前我有過一個錯誤,所以我從os導入*,並且忘記了它。 -facepalm- 謝謝! :D – user1048917 2012-02-20 00:06:14

3

您需要轉義您的字符串:字符串中的\是一個轉義字符。

要麼逃避斜線:

"C:\\KingsCapture\\Test\\List.txt" 

或使用原始字符串:

r"C:\KingsCapture\Test\List.txt" 
+0

這是一個好點,我忘了與其他人。雖然這不是導致問題的原因,但我也應該改變這一點。 :P謝謝 – user1048917 2012-02-20 00:17:02

0

我敢打賭,n是1而不是"1"

嘗試:

print(type(n)) 

我猜你會看到它的int不是一個字符串。

File = open("C:\KingsCapture\Saves\\" + n + "\BF.txt", "w") 

您不能添加ints和字符串產生您收到的錯誤消息。

+0

向一個字符串添加一個int會產生'TypeError:無法在Python 2.7中連接'str'和'int'objects',我想。 – DSM 2012-02-19 23:28:28

+0

具體設置n爲「1」,「2」,「3」或「4」,具體取決於按下的按鈕 – user1048917 2012-02-20 00:04:09

2

如DSM所述,您使用的是http://docs.python.org/library/os.html#os.open而不是內置的open()函數。

在os.open()中,第二個參數(mode)應該是整數而不是字符串。所以,如果你應當用​​然後就替代模式串以下列參數的個數之一:

  • os.O_RDONLY
  • os.O_WRONLY
  • os.O_RDWR
  • os.O_APPEND
  • os.O_CREAT
  • os.O_EXCL
  • os.O_TRUNC
+3

實際上,使用該導入,他不需要「os」。爲常數。 – yak 2012-02-20 00:11:46

相關問題