为什么Python不应该给我“需要一个整数”?

时间:2012-02-19 23:13:17

标签: python file load pickle

我的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

在shell中进行相同的加载后,我没有错误:

>>> 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")

为什么这有问题?

4 个答案:

答案 0 :(得分:15)

您可能已从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

答案 1 :(得分:4)

您需要转义字符串:字符串中的\是转义字符。

要么逃避斜杠:

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

或使用Raw字符串:

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

答案 2 :(得分:2)

正如DSM所说,你使用的是http://docs.python.org/library/os.html#os.open而不是内置的open()函数。

在os.open()中,第二个参数(mode)应该是整数而不是字符串。所以,如果您应该使用from os import *,那么只需使用以下args之一替换模式字符串:

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

答案 3 :(得分:0)

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

尝试:

print(type(n))

我猜你会看到int不是字符串。

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

您无法添加产生错误消息的整数和字符串。