После вызова pygame.init () Python не может создавать или записывать в файлы - PullRequest
0 голосов
/ 27 августа 2018

Я недавно выяснил, что это происходит только в моей системе, что побудило меня отказаться от формы вопроса, как это исправить.Это потому, что я думаю, что это невозможно / очень трудно решить из-за того, что на моем компьютере играют разные переменные, плюс это будет отличаться для всех.Кроме того, это не поможет никому, кроме меня, который не одобряет StackOverflow.Вместо этого я перенес свой вопрос на: каковы некоторые факторы, из-за которых это не работает, и как мы можем предотвратить их / сделать это более надежным для всех систем, или это странная одноразовая ошибка, которая встречается редко.Ниже я оставил следующую документацию о том, что я сделал для устранения проблемы в моей системе, а также другую информацию, которую я обнаружил, надеюсь, это может помочь обнаружить потенциальные ошибки, чтобы предотвратить это в будущем.(Пожалуйста, дайте мне знать, если это невозможно решить, и я удалю вопрос) также, пожалуйста, скажите мне, если это не так, как вы делаете, и если мне нужно удалить этот вопрос и сделать новый, спасибо (я новичокк StackOverflow и программированию, очевидно).

Back Story (не обязательно): я делаю игру в pygame, и я закончил ее, но в конце я хотел, чтобы она была полноэкранной.После быстрого поиска в гугле я узнал, как это сделать, и реализовал его.После запуска игры я осознал границы краев экрана, где по-прежнему исходные настройки, и моя игра в значительной степени опиралась на это для использования обнаружения столкновений по краям.И поскольку это отличается для каждого экрана, я подумал, что могу позволить пользователю самим определять размер экрана, поэтому я разработал систему, в которой пользователь контролирует размер экрана с помощью клавиш со стрелками (экран pygame) и сообщает программе, когда он подходитна экране полностью, система затем берет эти значения и сохраняет их.Однако, так как это мучительный процесс, который нужно завершить перед началом каждой игры, я хотел, чтобы эти данные были постоянными, и решил, что самый простой способ сделать это - сохранить их (записать) в файл, а затем, когда игра начнется,посмотрите, есть ли в файле какие-либо данные для пользователя и использует ли он только эти значения.Неудачно я обнаружил, что это бросало ошибки в пигме.Я был сбит с толку, потому что я делал это в других проектах раньше, чтобы перепроверить, я скопировал вставил код, где я читал и записывал в файлы, и, конечно же, это сработало.Это привело меня к мысли, что возникла проблема с интеграцией Pygame.

Форсайт: После тщательного исследования я все еще не мог найти какую-либо информацию по этой теме, за исключением, возможно, ошибки: OSError: [Errno 9] Bad file descriptor обычно являлась причиной, по которой внешняя сила закрывала программу, а затем удалялапеременная, а затем переменная, пытающаяся закрыть файл, но обнаружив, что файл уже закрыт.Кроме того, я считаю, что программа работает случайно, но редко.

После долгих экспериментов я свел проблему к конкретному, после того как pygame.init () был вызван, как показано в этом примере кода:

Перед вызовом pygame.init ():

import pygame
f=open("file.txt","r")
test=f.read()
print("File: "+test)
f.close()
f=open("file.txt","w")
f.write("changed!")
f.close()
f=open("file.txt","r")
test=f.read()
print("File: "+test)
f.close()
input()
pygame.init()

Результат:

pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html
File: hello
File: changed!

После вызова pygame.init ():

import pygame
pygame.init()
f=open("file.txt","r")
test=f.read()
print("File: "+test)
f.close()
f=open("file.txt","w")
f.write("changed!")
f.close()
f=open("file.txt","r")
test=f.read()
print("File: "+test)
f.close()
input()

Результат:

pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html
File: changed!
OSError: [Errno 9] Bad file descriptor

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\sengu\Documents\Python\JCC\Pygame\Before init.py", line 9, in <module>
    f.close()
OSError: [Errno 9] Bad file descriptor

Зная о причине этой ошибки, я подумал удалить другую функцию f.close () и просто оставить последнюю, и фактически это избавило от ошибок!но, к сожалению, результат программы не был достигнут:

import pygame
pygame.init()
f=open("file.txt","r")
test=f.read()
print("File: "+test)
f=open("file.txt","w")
f.write("changed!")
f=open("file.txt","r")
test=f.read()
print("File: "+test)
f.close()
input()

Результат:

pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html
File: hello
File: hello

Так что это не записывает в файл, но по какой-то причине не выдает ошибку.Наконец, я должен отметить, что это только самые последовательные результаты, как упоминалось ранее, иногда случайно и непредсказуемо (по крайней мере для меня) это работает.Буду признателен за любую помощь в достижении этой цели.

...