Почему Python дает мне «целое число требуется», когда это не должно быть? - PullRequest
7 голосов
/ 20 февраля 2012

В моей программе на 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")

Почему это проблема?

Ответы [ 4 ]

15 голосов
/ 20 февраля 2012

Вы, вероятно, выполнили импорт звездочек из модуля 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, где это практически возможно.

4 голосов
/ 20 февраля 2012

Вам нужно экранировать строки: символ \ \ в строке является escape-символом.

Либо экранируйте косую черту:

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

, либо используйте строки Raw:

r"C:\KingsCapture\Test\List.txt"
2 голосов
/ 20 февраля 2012

Как заметил DSM, вы используете http://docs.python.org/library/os.html#os.open вместо встроенной функции open ().

В os.open () второй параметр (mode) должен быть целым числом вместострока.Итак, если вам нужно использовать from os import *, просто замените строку режима одним из следующих аргументов:

  • os.O_RDONLY
  • os.O_WRONLY
  • os.O_RDWR
  • os.O_APPEND
  • os.O_CREAT
  • os.O_EXCL
  • os.O_TRUNC
0 голосов
/ 20 февраля 2012

Держу пари, что n равно 1, а не "1".

try:

print(type(n))

Я думаю, вы увидите, что int не строка.

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

Вы не можете добавлять целыеи строки, которые выдают сообщение об ошибке.

...