Why is Python giving me “an integer is required” when it shouldn't be?

穿精又带淫゛_ 提交于 2019-12-29 07:42:09

问题


I have a save function within my Python program which looks like this:

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)

Here, n is "1".

I get an error looking like this:

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

Upon doing the same loading within the shell, I get no errors:

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

Why is this having a problem?


回答1:


You probably did a star import from the os module:

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

so you're using the wrong open function. (I suppose you could've simply done from os import open, but that's less likely.) In general this import style should be avoided, as should use of global, where practical.




回答2:


You need to escape your strings: a \ in a string is an escape character.

Either escape the slashes:

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

or use Raw strings:

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



回答3:


As DSM noted, you're using http://docs.python.org/library/os.html#os.open instead of built-in open() function.

In os.open() the second parameter (mode) should be integer instead of string. So, if you ought to use from os import * then just substitute mode string with one of the following args:

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



回答4:


I'll bet that n is 1 not "1".

try:

print(type(n))

I'll guess that you'll see its an int not a string.

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

You can't add ints and strings producing the error message you are getting.



来源:https://stackoverflow.com/questions/9354276/why-is-python-giving-me-an-integer-is-required-when-it-shouldnt-be

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!