this post was submitted on 11 Dec 2023
1162 points (98.9% liked)

Programmer Humor

32503 readers
558 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
 
you are viewing a single comment's thread
view the rest of the comments
[–] PlexSheep@feddit.de 15 points 11 months ago (4 children)

I mean if they can see that we type exit and show us this message, why could they not just start the exiting when we type exit?

[–] Zron@lemmy.world 18 points 11 months ago (1 children)

Because exit might be a variable you use to determine if you should exit. exit() is a function that actually does the exiting.

It’s the difference between pointing at a jogger and saying “run” and actually running after them.

[–] Bronco1676@lemmy.ml 17 points 11 months ago (2 children)

If you have a variable called exit you've overwritten the function in that scope, and won't be able to execute it.

e.g.

>>> exit=1
>>> exit()
Traceback (most recent call last):
  File "", line 1, in 
TypeError: 'int' object is not callable
>>>
[–] EmergMemeHologram@startrek.website 17 points 11 months ago

Reminds me of setting pi = 3 in my friends matlab subroutines in school.

[–] peopleproblems@lemmy.world 5 points 11 months ago

wow it does do that. cool

[–] WhiskyTangoFoxtrot@lemmy.world 14 points 11 months ago (1 children)

Guessing at what the programmer wants instead of implementing consistent behaviour is what Javascript does. Do you want Python to become Javascript?

[–] tetris11@lemmy.ml 5 points 11 months ago (2 children)

Just once I want '1' + '2' to equal '3'. Is that so much to ask?

[–] Metype@lemmy.world 7 points 11 months ago (1 children)

You want to remove the string concatenation operator? Cause that'll do it

[–] tetris11@lemmy.ml 9 points 11 months ago (1 children)

I think every language needs a please operator, which acts to enforce human expectation of a statement:

'1'  + '1'            ## evaluates to '11'
please '1' + '1' ## evaluates to '2'
[–] PlexSheep@feddit.de 4 points 11 months ago

I kinda like that

[–] wewbull@feddit.uk 5 points 11 months ago

Yes. Yes it is.

[–] Bronco1676@lemmy.ml 7 points 11 months ago* (last edited 11 months ago)

This is the code (Github link):

class Quitter(object):
    def __init__(self, name, eof):
        self.name = name
        self.eof = eof
    def __repr__(self):
        return 'Use %s() or %s to exit' % (self.name, self.eof)
    def __call__(self, code=None):
        # Shells like IDLE catch the SystemExit, but listen when their
        # stdin wrapper is closed.
        try:
            sys.stdin.close()
        except:
            pass
        raise SystemExit(code)

What happens is that the python repl calls __repr__ automatically on each variable/statement that you type into the repl (except assignments e.g. x = 1). But this basically only happens in the repl. So "executing" only exit wouldn't work in a python script as it is not calling __repr__ automatically, so better you learn how to do it right than using just exit in your python scripts and scratching your head why it works in the repl but not in your code.

[–] eluvatar@programming.dev 2 points 11 months ago

Because python has strong opinions