[ python-Bugs-1173637 ] quit should quit

SourceForge.net noreply at sourceforge.net
Sun Apr 17 12:42:38 CEST 2005


Bugs item #1173637, was opened at 2005-03-30 21:37
Message generated for change (Comment added) made by pernici
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1173637&group_id=5470

Category: None
Group: None
Status: Closed
Resolution: Wont Fix
Priority: 5
Submitted By: Matt Chaput (mchaput)
Assigned to: Nobody/Anonymous (nobody)
Summary: quit should quit

Initial Comment:
When the user types "quit" in the interpreter, instead
of quitting the program gives him or her a lecture on
the "proper" way to quit.

This is very obnoxious.

Since the interpreter obviously understands the "quit"
command, it should just quit, dammit.

----------------------------------------------------------------------

Comment By: Pernici Mario (pernici)
Date: 2005-04-17 10:42

Message:
Logged In: YES 
user_id=756712

To allow the builtin quit() only when using
Python interactively, one can put in a start-up quitfile.py

def quit():
  import sys
  sys.exit(0)


and set
export PYTHONSTARTUP=quitfile.py
One could add to this file also
exit = quit
since the builtin exit behaves like quit.


----------------------------------------------------------------------

Comment By: Armin Rigo (arigo)
Date: 2005-04-02 12:24

Message:
Logged In: YES 
user_id=4771

Raymond, an argument against quit() actually quitting the interpreter is that it suddenly makes quit() a quasi-official piece of the Python API, and we're bound to see user programs start to write quit() instead of sys.exit().

----------------------------------------------------------------------

Comment By: Martin v. Löwis (loewis)
Date: 2005-04-01 21:47

Message:
Logged In: YES 
user_id=21627

But how is this better than the current

>>> quit
'Use Ctrl-D (i.e. EOF) to exit.'

I'd rather learn that I have to type Ctrl-D instead of
typing quit()

I think the original report is misguided: The interpreter
does not "obviously understand" the quit command. Instead,
it really does not understand it all. The name quit is bound
to a string, and the interpreter displays the string. It
does not understand at all what the string says.

So I'm rejecting the report as "won't fix".

----------------------------------------------------------------------

Comment By: Raymond Hettinger (rhettinger)
Date: 2005-04-01 18:13

Message:
Logged In: YES 
user_id=80475

class quit:
    def __repr__(self):
        return "Type quit() to exit the interpreter"
    def __call__(self):
        sys.exit()

Requiring the parentheses is not a big deal as long as there
is an advisory where they are omitted.

----------------------------------------------------------------------

Comment By: Armin Rigo (arigo)
Date: 2005-04-01 11:12

Message:
Logged In: YES 
user_id=4771

This discussion keeps coming up time and again.  sjoerd's trick has been tried a few times already, until people implementing it realized that trying to display the builtins dict (directly or indirectly) would quit the interpreter!

'quit' cannot just be a synonym for 'sys.exit' either, because typing 'quit' would just print '<built-in function quit>', which is worse than the current situation in term of expliciteness.

----------------------------------------------------------------------

Comment By: Sjoerd Mullender (sjoerd)
Date: 2005-04-01 11:04

Message:
Logged In: YES 
user_id=43607

Something like this instead of the current quit should do
the trick:

class Quit:
    def __repr__(self):
        import sys
        sys.exit(0)
quit = Quit()
del Quit

The problem with the Raymond's suggestion is that you need
to type parentheses.
But of course, this does get a little magical...

----------------------------------------------------------------------

Comment By: Raymond Hettinger (rhettinger)
Date: 2005-04-01 06:14

Message:
Logged In: YES 
user_id=80475

'quit' and 'exit' currently show-up in a dir() of__builtins__.  

If the OP's suggestion is accepted, it should probably be 
implemented just like a builtin:

    def quit():
        sys.exit()

That approach is not at all magical and still allows shadowing 
(quit=2, etc.)

What we have now is an annoying wart.

----------------------------------------------------------------------

Comment By: Ilya Sandler (isandler)
Date: 2005-04-01 04:35

Message:
Logged In: YES 
user_id=971153

I am not sure adding quit to interpreter is such a good idea:

Right now quit is treated as an ordinary (non-keyword)
identifier...
(with a bit of magic: if quit is not defined then lecture
the user :-))...

E.g now you can do this:

 >>> quit=2 
 >>> quit
 2

Would you want to disallow this usage when quit becomes a
"magic word"?



----------------------------------------------------------------------

Comment By: Michael Hudson (mwh)
Date: 2005-03-31 09:49

Message:
Logged In: YES 
user_id=6656

I'm not so sure typing quit should quit -- that doesn't seem like Python to 
me (how would you implement it?)

Having quit be the same object as sys.exit seems sensible.

----------------------------------------------------------------------

Comment By: Raymond Hettinger (rhettinger)
Date: 2005-03-30 22:11

Message:
Logged In: YES 
user_id=80475

I concur!

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1173637&group_id=5470


More information about the Python-bugs-list mailing list