Sto eseguendo il porting di un programma da Python2 (non conosco la versione esatta usata) a Python3.3 e aggiornando alcune cose, ma questo ciclo che controlla il esistenza di una serie di percorsi di file a cui si accede recentemente contro i file veri si blocca.L'esistenza del file Python verifica arresti anomali del loop - a meno che non aggiunga una dichiarazione di stampa
for index in range(story.recentFiles.GetCount()):
try:
if not os.path.exists(story.recentFiles.GetHistoryFile(index)): pass
except IOError:
self.RemoveRecentFile(story, index)
break
L'accesso a un singolo file funziona bene, quindi è qualcosa che ha a che fare con il ciclo. Se passo il ciclo con un debugger, il codice funziona bene, ma se eseguo semplicemente l'applicazione, si blocca su un errore "python.exe ha smesso di rispondere".
La parte più strana, però, ha avuto modo di essere che quando aggiungo una dichiarazione di stampa prima della os.path.exists
, funziona su un normale runthrough:
for index in range(story.recentFiles.GetCount()):
try:
print('test') # Why does printing this make it not crash??
if not os.path.exists(story.recentFiles.GetHistoryFile(index)): pass
except IOError:
self.RemoveRecentFile(story, index)
break
Che cosa è in su con quello? Suppongo che abbia qualche tipo di relazione con la velocità del loop rispetto ai tempi di accesso ai file o qualcosa di simile dato che passare lentamente permette di eseguirlo bene, ma onestamente non ho idea di quale sia il problema.
Forse un bug con Python 3 :)? – Bharat
Potrebbe essere un bug. Un'ipotesi più improbabile è che, se il programma non fa nulla, Windows pensa che non stia rispondendo. Ma se si stampa qualcosa, MS conosce il funzionamento dell'applicazione. Mi è successo una volta in VB.NET. – refi64
Quali sono i file che sta accedendo?Esistono? Che cosa fanno quelle chiamate in "storia"? Puoi dare un esempio completo, eseguibile e riproducibile? – BrenBarn