为什么Python在不应该给我整数的时候却给了我“一个整数是必需的”?

2024-05-17 19:34:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我的Python程序中有一个save函数,如下所示:

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

为什么这有问题?


Tags: txtsave错误opendumpglobalpicklefile
3条回答

您可能从操作系统模块中导入了一个星形:

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

所以你使用了错误的open函数。(我想您可以简单地完成from os import open,但这是不太可能的)一般来说,应该避免这种导入样式,在实际情况下也应该避免使用global

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

要么逃离刀口:

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

或者使用原始字符串:

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

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

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

  • 仅限操作系统
  • 操作系统
  • 操作系统
  • 附加操作系统
  • 操作系统创建
  • 不包括操作系统
  • 操作系统

相关问题 更多 >