python: el proceso finalizó con el código de salida 1 cuando se usa PyCharm y PyQt5

Tengo tres scripts de Python (3.4.3). Uno de ellos es para controlar el archivo .ui generado por PyQt5. Cuando ejecuto el progtwig GUI, acepta todos los datos y todo, y cuando presiono el botón OK en un InputDialog, la ventana se cierra y aparece la consola.

Process finished with exit code 1

Cuando ejecuto el mismo código en Python IDLE, muestra:

<<<<<>>>>>

Esto nunca sucedió cuando usé este mismo código Python (3.4.3 o 2.7) en Visual Studio. ¿Cuál podría ser la razón?

Aquí está el código del archivo python que controla el archivo .ui.

 import sys from PyQt5 import QtCore, QtGui, uic, QtWidgets from Email import encrypt_email from Email import decrypt_email from Email import newuser qtCreatorFile = "rsegui.ui" # Enter file here. Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile) class MyApp(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self): QtWidgets.QMainWindow.__init__(self) Ui_MainWindow.__init__(self) self.setupUi(self) user, ok = QtWidgets.QInputDialog.getText(self, 'New User', 'Are you a new user?') user=str(user) if user in "YESYesyesYy": email, ok = QtWidgets.QInputDialog.getText(self, 'New User', 'Enter Your Email ID:') email1=str(email) self.sender.setText(email) newuser(email1) self.encrypt_and_send.clicked.connect(self.EncryptEmail) self.decrypt.clicked.connect(self.DecryptEmail) self.clear.clicked.connect(self.ClearEncrypt) self.clear_2.clicked.connect(self.ClearDecrypt) self.sender.setPlaceholderText("Your Email ID") self.receiver.setPlaceholderText("Receivers, Separate them by ';'") self.subject.setPlaceholderText("Enter Subject") self.message.setPlaceholderText("Enter Message") self.sender_2.setPlaceholderText("Your Email ID") self.message_2.setPlaceholderText("Encrypted Text") def EncryptEmail(self): sender = str(self.sender.text()) receiver = str(self.receiver.text()) receivers = receiver.split(';') subject = str(self.subject.text()) message = str(self.message.text()) password, ok = QtWidgets.QInputDialog.getText(self, 'Password', 'Enter your password:',QtWidgets.QLineEdit.Password) encrypt_email(sender,receivers,subject,message,password) def DecryptEmail(self): email = str(self.sender_2.text()) message = str(self.message_2.text()) self.decrypted.setText(decrypt_email(email,message)) def ClearDecrypt(self): self.sender_2.clear() self.message_2.clear() def ClearEncrypt(self): self.sender.clear() self.message.clear() self.receiver.clear() self.subject.clear() if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) window = MyApp() window.show() sys.exit(app.exec_()) 

He abordado el mismo problema, y ​​la respuesta es doble:

  1. La razón por la que se estrella puede ser cualquier número de cosas. Probablemente sea un error de progtwigción, llamar a una función que no existe, pasar un widget en lugar de un diseño, etc. Pero como no está obteniendo resultados útiles, no sabe dónde buscar al culpable. Esto es causado por:
  2. PyQT genera y captura excepciones, pero no las pasa. En su lugar, solo sale con un estado de 1 para mostrar que se detectó una excepción.

Para detectar las excepciones, debe sobrescribir el controlador de excepciones sys:

 # Back up the reference to the exceptionhook sys._excepthook = sys.excepthook def my_exception_hook(exctype, value, traceback): # Print the error and traceback print(exctype, value, traceback) # Call the normal Exception hook after sys._excepthook(exctype, value, traceback) sys.exit(1) # Set the exception hook to our wrapping function sys.excepthook = my_exception_hook 

Luego, en su código de ejecución, envuélvalo en un try / catch.

 try: sys.exit(app.exec_()) except: print("Exiting")