tags:

views:

47

answers:

1

Here's an excerpt of my code:

def listFrom(here):
    print "[DBG] here: " + here

def book(here, there, amount):
    print "[DBG] here: " + here + "; there: " + there + "; amount: " + str(amount)

# Code that takes input and stores it into the string input

# Yes, I know this is dangerous, but it's part of a
# school assignment where we HAVE to use eval.
eval(input, {"__builtins__": {}, "listAll": listAll, "listFrom": listFrom, "listFromTo": listFromTo, "book": book, "about": about, "commands": commands, "book": book})

If I enter listFrom('LON'), the program returns [DBG] here: LON as expected. However, when I do book('LON', 'MAN', 8) I get an inexplicable [DBG] here: ☺; there: ☻; amount: ♥. What could be the cause of this?

A: 

This code works without problems in Python 2.6 on Linux/x86-32:

>>> def listFrom(here):
...     print "[DBG] here: " + here
... 
>>> def book(here, there, amount):
...     print "[DBG] here: " + here + "; there: " + there + "; amount: " + str(amount)
... 
>>> book('LON', 'MAN', 8)
[DBG] here: LON; there: MAN; amount: 8
>>> input = """book('LON', 'MAN', 8)"""
>>> eval(input, {"__builtins__": {}, "listFrom": listFrom, "book": book})
[DBG] here: LON; there: MAN; amount: 8
>>> eval("""listFrom('LON')""", {"__builtins__": {}, "listFrom": listFrom, "book": book})
[DBG] here: LON

What Python version are you using? On which OS/architecture?

Danilo Piazzalunga
Oh shoot, you're right. The code I isolated works fine, but I had done some wacky stuff that caused `eval` not to be executed at all in some cases.
Pieter