Opinion on best practice...

Steven D'Aprano steve+comp.lang.python at pearwood.info
Thu Feb 7 01:50:07 EST 2013


On Thu, 07 Feb 2013 16:28:17 +1100, Chris Angelico wrote:

> On Thu, Feb 7, 2013 at 10:46 AM, Steven D'Aprano
> <steve+comp.lang.python at pearwood.info> wrote:
>> Dennis Lee Bieber wrote:
>>> Though that is the nice feature of REXX*... Anything that wasn't
>>> parsable as a REXX statement was automatically sent to the current
>>> command processor.
>>
>> Nice? Are you being sarcastic? What you're describing sounds like a
>> classic "Do What I Mean" system, which invariably end up being followed
>> by anguished shouts of "Noooo, I didn't mean that!!!".
>>
>> If you say "Anything that isn't parsable is automatically sent to the
>> shell", it doesn't sound too bad. But when you say "Unparseable junk is
>> implicitly treated as code and sent off to be executed by something
>> which traditionally tends to be forgiving of syntax errors and has the
>> ability to turn your file system into so much garbage", it sounds a tad
>> less appealing.
> 
> You misunderstand. It's actually a very simple rule. Python follows C's
> principle of accepting that any return value from an expression should
> be ignored if you don't do anything with it. 

Return values are safe. They don't do anything, since they are *being 
ignored*, not being executed as code. You have to explicitly choose to do 
something with the return value before it does anything.

If C said "if you don't do anything with the return result of an 
expression, execute it as code in the shell", would you consider that a 
desirable principle to follow?

def oh_my_stars_and_garters():
    return "rm -rf /"

oh_my_stars_and_garters()


> REXX says that any "bare
> expression" used as a statement is implicitly addressed to the default
> host, which is usually a shell (though I built myself a MUD system where
> the default would send text to the client, and shell execution required
> ADDRESS CMD "some_command" explicitly); it's very simple and doesn't
> feel like a DWIM system at all.

Are you saying that Dennis' description of REXX sending unparsable text 
to the shell for execution is incorrect?


-- 
Steven



More information about the Python-list mailing list