Oggi mi sono imbattuto nel fatto, che chiamato da un thread secondario non uccida il processo principale. Non lo sapevo prima, e va bene, ma ho avuto bisogno di molto tempo per rendermene conto. Avrebbe risparmiato molto tempo, se sys.exit(msg)
avrebbe stampato msg
a stderr
. Ma non è stato così.Python: Perché `sys.exit (msg)` chiamato da un thread non stampa `msg` in stderr?
Si è scoperto che non era un vero bug nella mia applicazione; si chiamava sys.exit(msg)
con un errore significativo in modo volitivo, ma non riuscivo a vederlo.
In the docs for sys.exit()
it is stated: "[...] qualsiasi altro oggetto viene stampato sys.stderr
e si traduce in un codice di uscita di 1"
Questo è non è vero per una chiamata da un bambino-thread, dove sys.exit()
comporta ovviamente come thread.exit()
: "Sollevare l'eccezione SystemExit Quando non catturati, ciò farà sì che il filo per uscire silenziosamente."
Penso che quando un programmatore vuole che sys.exit(msg)
stampi un messaggio di errore, questo dovrebbe essere stampato - indipendentemente dal luogo da cui viene chiamato. Perchè no? Al momento non vedo alcuna ragione. Almeno ci dovrebbe essere un suggerimento nei documenti per che il messaggio non viene stampato dai thread.
Cosa ne pensi? Perché i messaggi di errore sono nascosti dai thread? Ha senso ciò?
Con i migliori saluti,
Jan-Philip Gehrcke
Mi hai dato un buon consiglio, di nuovo;) Btw: È così bello che condividi le tue conoscenze qui. Vedo che al momento passi gran parte del tuo tempo a riempire questa piattaforma con roba pura di Python esperta!Questo è ciò di cui la comunità ha bisogno ma non è ovvio. Molto molto grande Grazie per questo! Jan-Philip –
@ Jan-Philip, siete i benvenuti e, grazie per i complimenti, è sempre bello sapere che sono di aiuto! –