我最近发现这仅发生在我的系统上,导致我放弃了如何解决此问题的问题表格。这是因为我认为这是不可能/很难解决的,因为我的PC上存在许多不同的变量,而且每个人的情况都会有所不同。另外,这对没有任何帮助,除了我不鼓励StackOverflow的人。我反而将我的问题迁移到:导致此功能不正常的一些因素是什么,我们如何防止它们/使它对所有系统都更可靠,或者这是一次罕见的奇怪的一次性错误。我留下了以下关于如何对系统上的问题进行故障排除的工作以及我发现的其他信息的文档,希望这可能有助于发现潜在的错误,以防止将来再次发生此问题。 (如果无法解决此问题,请告诉我,我将删除问题)也请告诉我这是否不是您的工作方式,是否需要删除此问题并提出一个新问题,谢谢(我是新到StackOverflow并进行编程)。
背景故事(不是必需的):我正在pygame中制作游戏,并且已经完成游戏,但最后我希望它能全屏显示。在Google进行快速搜索后,我发现了如何执行并实施了它。在运行游戏之后,尽管我意识到屏幕边缘的边界,但原始设置和我的游戏仍然严重依赖于此,以便对边缘进行碰撞检测。由于每个屏幕的情况都不同,我认为我可以让用户决定其屏幕大小,因此我开发了一个系统,用户可以使用箭头键(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
因此,这不会写入文件,但是由于某种原因,它也不会产生错误。最后,我必须指出,这些只是前面提到的最一致的结果,有时是随机的和不可预测的(至少对我而言)。对于如何完成此操作的任何帮助将不胜感激。