Should I use `app.exec()` or `app.exec_()` in my PyQt application?
Question: I use Python 3 and PyQt5. Here's my test PyQt5 program, focus on the last 2
lines:

    
    
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    import sys
    
    class window(QWidget):
    def __init__(self,parent=None):
        super().__init__(parent)
        self.setWindowTitle('test')
        self.resize(250,200)
    
    app=QApplication(sys.argv)
    w=window()
    w.show()
    sys.exit(app.exec())
    #sys.exit(app.exec_())
    

I know `exec` is a language keyword in Python. But code on [Official PyQt5
Documentation](http://pyqt.sourceforge.net/Docs/PyQt5/pyqt4_differences.html#object-
destruction-on-exit) _(specifically the**Object Destruction on Exit** part)_.
I see that example shows use of `app.exec()` which confuses me.

When I tested it on my machine. I found there is no any visible difference
from my end. Both with and without `_` produces the same output in no time
difference.

My question is:

  * Is there anything wrong going when I use `app.exec()`? like clashing with Python's internal `exec`? I suspect because both `exec`'s are executing something.
  * If not, can I use both interchangeably?


Answer: That's because until Python 3, `exec` [was a reserved
keyword](http://docs.python.org/2.7/reference/lexical_analysis.html#keywords),
so the PyQt devs added underscore to it. From Python 3 onwards, `exec` is [no
longer a reserved
keyword](http://docs.python.org/3/reference/lexical_analysis.html#keywords)
(because it is a builtin function; same situation as `print`), so it made
sense in PyQt5 to provide a version without an underscore to be consistent
with C++ docs, but keep a version with underscore for backwards compatibility.
So for PyQt5 with Python 3, the two `exec` functions are the same. For older
PyQt, only `exec_()` is available.

