Периодическое создание каталогов и записи в файл ошибок в Python 2.7
У меня периодически возникают проблемы с созданием каталогов и записью в файлы. У меня два ноутбука под управлением Windows 10 Home Edition (оба с версией ОС 1709, сборка 16299.371). Обе машины являются 64-битными. Старый процессор Intel i7 с тактовой частотой 2,2 ГГц, новый с тактовой частотой 2,59 ГГц и дисководом SS.) Оба работают под управлением Python 2.7. Мой код отлично работает на старой машине каждый раз. Нет проблем. Однако на новой машине чаще всего возникают ошибки при создании каталога и / или записи в файл. Поскольку код отлично работает на старой машине, но не на новой, похоже, это аппаратная проблема, из-за которой Python выдает ошибку. Я в растерянности и пытаюсь понять это в течение 4 дней. Вот код и ошибки. Если у кого-то есть идеи, буду очень признателен. Заранее спасибо за ваши усилия. Код:
import os, time, errno
from RESOURCES.GUI_by_flav import *
myscreen = pygame.display.set_mode((640,480),pygame.RESIZABLE,32)
buttons = [] # Buttons are objects created in another file.
# NOTE: Sometimes increasing the numbdr of buttons causes the problem.
buttons.append(MyButton(myscreen,70,10,50,20,"Button1",12) )
buttons.append(MyButton(myscreen,70,40,50,20,"Button2",12) )
buttons.append(MyButton(myscreen,70,40,50,20,"Button3",12) )
buttons.append(MyButton(myscreen,70,40,50,20,"Button4",12) )
buttons.append(MyButton(myscreen,70,10,50,20,"Button5",12) )
buttons.append(MyButton(myscreen,70,40,50,20,"Button6",12) )
buttons.append(MyButton(myscreen,70,40,50,20,"Button7",12) )
buttons.append(MyButton(myscreen,70,40,50,20,"Button8",12) )
# CREATE A DIRECTORY AND FILE TO STORE GUI ELEMENTS
cwd = os.getcwd() # get current working directory
resource_dir = os.path.join(cwd, "RESOURCES1") # add new folder name to path
resource_dir = resource_dir.replace('\\','/') # change forward slash to back slash
print(resource_dir)
print("Folder exists: ", os.path.exists(resource_dir)) # Does folder already exist?
if not os.path.exists(resource_dir):
try:
os.makedirs(resource_dir) # if not, then create it
except OSError as e:
if e.errno != errno.EEXIST:
raise
print("Directory '",resource_dir,"' was NOT created")
file_path = resource_dir +"/gui_elements.txt" # add a file to folder
try:
with open(file_path,'w+') as f: # open the file
myString = "buttons = []"
f.write('%s\n' % (myString))
try:
for b in buttons:
myString = "button.append(MyButton(myscreen," + str(b.x) + ','+ str(b.y) + ',' + str(b.w) + ',' + str(b.h) + ',' + '"' + b.text + '"' + ',' + '12)'
print (myString)
f.write('%s\n' % (myString))
except OSError as e:
if e.errno != errno.EEXIST:
raise
except OSError as e:
if e.errno != errno.EEXIST:
raise
печать ("Файл НЕ записан!!!")
ОШИБКИ СОЗДАНИЯ ВРЕМЕННОЙ КАТАЛОГИ: Вот распечатка, которую я получаю иногда, когда директория, RESOURCES1, не существует. Я получаю эту ошибку периодически. Иногда все отлично работает. ======= RESTART: C:/Users/flavio/Desktop/PROJECTS/ComProject/test1.py ====== C: / Users / flavio / Рабочий стол /PROJECTS/ComProject/RESOURCES1 ('папка существует: ', Ложь)
Traceback (most recent call last):
File "C:/Users/flavio/Desktop/PROJECTS/ComProject/test1.py", line 28, in <module>
os.makedirs(resource_dir) # if not, then create it
File "C:\Python27-64\lib\os.py", line 157, in makedirs
mkdir(name, mode)
WindowsError: [Error 2] The system cannot find the file specified: 'C:/Users /flavio/Desktop/PROJECTS/ComProject/RESOURCES1'
ПРЕРЫВАЮЩАЯСЯ ЗАПИСЬ В ОШИБКИ ФАЙЛА: Вот ошибка, которую я иногда получаю при записи в файл. Простое изменение количества строк, которые я пишу, иногда приводит к ошибке, иногда нет. Это кажется случайным. И опять же, такого не бывает на моей старой машине. Трассировка (последний вызов был последним): файл "C:/Users/flavio/Desktop/PROJECTS/ComProject/test1.py", строка 67, в печати ("Готово с циклом")
IOError: [Errno 9] Неверный дескриптор файла
Для полноты и риска получения слишком большого количества информации из моего класса RESOURCES.GUI_by_flav RESOURCES.GUI_by_flav импортировано следующее: MyButton: def init(self, surface, x, y, w, h, text, fsize = 16): self.surface = поверхность self.UP_DN = "UP" self.lw = lw = 4 #line_width self.bw = bw = 4 self.x = x self.y = y self.w = w self.h = h
self.text=text
self.fsize = fsize
self.rect = Rect(x-bw+1,y-bw+1,w+2*bw,h+2*bw)
self.face = Rect(x,y,w,h)
self.pt1 = x,y
self.pt2 = x+w,y
self.pt3 = x+w,y+h
self.pt4 = x,y+h
self.button_pos = "UP"
self.face_color = (150,150,150)
def draw(self):
self.face = Rect(self.x,self.y,self.w,self.h)
self.pt1 = self.x, self.y
self.pt2 = self.x + self.w, self.y
self.pt3 = self.x + self.w, self.y + self.h
self.pt4 = self.x , self.y + self.h
self.rect = Rect(self.x - self.bw + 1, self.y - self.bw + 1,
self.w + 2 * self.bw, self.h + 2 * self.bw)
if self.UP_DN == "UP":
self.draw_up()
elif self.UP_DN == "DN":
self.draw_down()
def draw_up(self):
self.UP_DN = "UP"
surface = self.surface
face_color = self.face_color
ln_color=Color('black')
lw = 4 #Line width
#draw box
pygame.draw.rect(surface, ln_color, self.rect)
pygame.draw.rect(surface, face_color, self.face)
#Highlight
pygame.draw.line(surface, (255, 255, 255), (self.pt1), (self.pt2))
pygame.draw.line(surface, (255, 255, 255), (self.pt2), (self.pt3))
pygame.draw.line(surface, (100, 100, 100), (self.pt1), (self.pt4))
pygame.draw.line(surface, (100, 100, 100), (self.pt4), (self.pt3))
# WRITE LABEL
my_font = pygame.font.SysFont('arial', self.fsize)
message1_sf = my_font.render(self.text, True, Color('white'))
msgHt =message1_sf.get_height()
msgWd = message1_sf.get_width()
msgX = (self.rect.width - msgWd)/2
msgY = (self.rect.height - msgHt)/2
surface.blit(message1_sf, self.rect.move(msgX, msgY))
def draw_down(self):
self.UP_DN = "DN"
surface = self.surface
face_color = self.face_color
ln_color=Color('black')
lw = 4 #Line width
#Draw Box
pygame.draw.rect(surface, ln_color, self.rect)
pygame.draw.rect(surface, face_color, self.face)
#Highlight
pygame.draw.line(surface, (255, 255, 255), (self.pt1), (self.pt4))
pygame.draw.line(surface, (255, 255, 255), (self.pt4), (self.pt3))
pygame.draw.line(surface, (100, 100, 100), (self.pt1), (self.pt2))
pygame.draw.line(surface, (100, 100, 100), (self.pt2), (self.pt3))
# WRITE LABEL
my_font = pygame.font.SysFont('arial', 20)
message1_sf = my_font.render(self.text, True, Color('white'))
msgHt =message1_sf.get_height()
msgWd = message1_sf.get_width()
msgX = (self.rect.width - msgWd)/2
msgY = (self.rect.height - msgHt)/2
surface.blit(message1_sf, self.rect.move(msgX, msgY+1))