----- Original Message -----
From: <[EMAIL PROTECTED]>
To: "Pythonce" <pythonce@python.org>
Sent: Friday, October 20, 2006 8:59 PM
Subject: [PythonCE] IndentationError in 2.5 command line interpreter
If I try to write a multi-line construct in the Pythonce 2.5 command line
interpreter,
I get an IndentationError
when I press Enter after a line with some control flow statement.
For example, consider this simple example:
for i in xrange(10):
When I press Enter at this point, I get:
IndentationError: expected an indented block.
In Pythonce 2.4.3 and earlier, pressing Enter forced a line break and I
could include
the necessary indentation on the continuation line. Is it a known issue
that this
behavior no longer works?
Thanks for your help.
Please try the attached script to see if it fixes the problem. Just put it
on your Pocket PC and double-click it.
Luke
#
# A builtin Python Console for Windows/CE
#
# David Kashtan, Validus Medical Systems
#
import sys
import _pcceshell_support
#
# If we can't import traceback, use a local print_exception function
#
try:
#
# Import traceback and use its print_exception function
#
import traceback
print_exception = traceback.print_exception
except:
#
# Local print_exception
#
def print_exception(Type, Value, Traceback, Limit=None):
#
# Print a warning message (once)
#
if "_Import_Message_Printed" not in globals():
global _Import_Message_Printed
_Import_Message_Printed = True
print "Warning: Unable to import traceback, using internal (minimal)
traceback"
#
# If there is no limit on the traceback depth, make it
sys.tracebacklimit
#
if Limit is None:
if hasattr(sys, "tracebacklimit"): Limit = sys.tracebacklimit
else: Limit = 100000
#
# Work our way up the traceback stack and output a line for each
frame (up to the depth limit)
#
if Traceback is not None and Limit > 0:
sys.stderr.write("Traceback (most recent call last):\n")
while Traceback is not None and Limit > 0:
Code = Traceback.tb_frame.f_code
sys.stderr.write(" File \"%s\", line %d, in
%s\n"%(Code.co_filename, Traceback.tb_lineno, Code.co_name))
Traceback = Traceback.tb_next
Limit -= 1
#
# Output the exception information
#
Type = str(Type)
if "." in Type: Type = Type[Type.index(".")+1:]
sys.stderr.write("%s: %s\n"%(str(Type), str(Value)))
#
# Add a writelines function to the PCCESHELL
#
def _writelines(File, Lines):
for Line in Lines: File.write(Line)
_pcceshell_support.writelines = _writelines
#
# Entry point from python.c: Wait for input, compile it and execute it
#
def main():
#
# Attempt to load the telnet server
#
try:
import telnetd
except ImportError:
pass
try:
#
# Initialize the session
#
Locals = {}
sys.stdout.write("Python %s on %s\n%s" % (sys.version, sys.platform,
sys.ps1))
while 1:
#
# Wait for input or exit
#
if not _pcceshell_support.Wait(): break
#
# Get the text to execute and compile it
#
Code_Text = _pcceshell_support.Get_Input_Text()
if not Code_Text: continue
try:
try:
Code_Object = compile(Code_Text, "<input>", "single")
except SyntaxError, Error:
try:
Code_Object = compile(Code_Text + "\n", "<input>",
"single")
except SyntaxError, Error1:
try:
Code_Object = compile(Code_Text + "\n\n", "<input>",
"single")
except SyntaxError, Error2:
if Code_Text.endswith("\n\n"):
raise SyntaxError, Error1
try:
# Python 2.4: e1 = Error1.__dict__
e1 = repr(Error1)
except AttributeError:
e1 = Error1
try:
# Python 2.4: e2 = Error2.__dict__
e2 = repr(Error2)
except AttributeError:
e2 = Error2
if e1 == e2:
raise SyntaxError, Error1
Code_Object = None
except SyntaxError:
#
# Compiler reported a syntax error
#
sys.stdout.write("\n")
Args = sys.exc_info() + (0,)
print_exception(*Args)
sys.stdout.write(sys.ps1)
continue
except:
#
# Other errors
#
Args = sys.exc_info()
print_exception(*Args)
continue
#
# See if we got anything
#
if not Code_Object:
#
# Just re-prompt
#
sys.stdout.write("\n%s" % sys.ps2)
continue
#
# Yes: Mark us busy and try to execute the code (with output
queued)
#
sys.stdout.write("\n")
_pcceshell_support.Busy(1);
try:
try:
exec Code_Object in Locals
except SystemExit:
#
# Exit: Just terminate
#
_pcceshell_support.Terminate()
return
except:
#
# Error: Get the exception information and generate a new
exception at this frame level
#
Exception_Type, Exception_Value, Exception_Traceback =
sys.exc_info()
try: 1/0
except:
#
# We can use this new exception to peel off
irrelevent frames from the REAL exception
#
Base_Traceback = sys.exc_traceback
while Exception_Traceback is not None:
Exception_Traceback = Exception_Traceback.tb_next
if Base_Traceback is None: break
Base_Traceback = Base_Traceback.tb_next
#
# Now print the exception
#
print_exception(Exception_Type, Exception_Value,
Exception_Traceback)
#
# Clean up
#
Base_Traceback = None
Exception_Type = None
Exception_Value = None
Exception_Traceback = None
finally:
#
# Mark us as not busy and show and queued output (turning
queueing off)
#
_pcceshell_support.Busy(0);
sys.stdout.write(sys.ps1)
except:
Args = sys.exc_info()
print_exception(*Args)
_pcceshell_support.Terminate()
_______________________________________________
PythonCE mailing list
PythonCE@python.org
http://mail.python.org/mailman/listinfo/pythonce