Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TurtleArt/talogo.py
diff options
context:
space:
mode:
Diffstat (limited to 'TurtleArt/talogo.py')
-rw-r--r--TurtleArt/talogo.py82
1 files changed, 39 insertions, 43 deletions
diff --git a/TurtleArt/talogo.py b/TurtleArt/talogo.py
index 86027ee..5212acb 100644
--- a/TurtleArt/talogo.py
+++ b/TurtleArt/talogo.py
@@ -40,7 +40,7 @@ from tablock import (Block, Media, media_blocks_dictionary)
from taconstants import (TAB_LAYER, DEFAULT_SCALE)
from tajail import myfunc
from tapalette import (block_names, value_blocks)
-from tatype import TATypeError
+from tatype import (TATypeError, TYPES_NUMERIC)
from tautils import (get_pixbuf_from_journal, data_from_file,
text_media_type, round_int, debug_output, find_group,
get_stack_name)
@@ -532,50 +532,46 @@ class LogoCode:
try:
while (_millisecond() - starttime) < 120:
try:
- if self.step is not None:
- if self.tw.running_turtleart:
- try:
- self.step.next()
- except ValueError, ve:
- debug_output('generator already executing',
- self.tw.running_sugar)
- self.tw.running_blocks = False
- return False
- except TATypeError as tte:
- # TODO insert the correct block name
- # (self.cfun.name is only the name of the
- # outermost block in this statement/ line of code)
- # TODO use logoerror("#notanumber") when possible
- raise logoerror("%s %s %s %s" % (self.cfun.name,
- _("doesn't like"), str(tte.bad_value),
- _("as input")))
- except ZeroDivisionError:
- raise logoerror("#zerodivide")
- except NegativeRootError:
- raise logoerror("#negroot")
- except IndexError:
- raise logoerror("#emptyheap")
- else:
- try:
- self.step.next()
- except TATypeError as tte:
- # TODO write better messages for TATypeErrors
- # TODO then remove this except clause
+ if self.step is None:
+ return False
+ if self.tw.running_turtleart:
+ try:
+ self.step.next()
+ except ValueError, ve:
+ debug_output('generator already executing',
+ self.tw.running_sugar)
+ self.tw.running_blocks = False
+ return False
+ except TATypeError as tte:
+ # TODO insert the correct block name
+ # (self.cfun.name is only the name of the
+ # outermost block in this statement/ line of code)
+ # use logoerror("#notanumber") when possible
+ if (tte.req_type in TYPES_NUMERIC and
+ tte.bad_type not in TYPES_NUMERIC):
+ raise logoerror("#notanumber")
+ else:
+ raise logoerror("%s %s %s %s"
+ % (self.cfun.name, _("doesn't like"),
+ str(tte.bad_value), _("as input")))
+ except ZeroDivisionError:
+ raise logoerror("#zerodivide")
+ except NegativeRootError:
+ raise logoerror("#negroot")
+ except IndexError:
+ raise logoerror("#emptyheap")
+ else:
+ try:
+ self.step.next()
+ except BaseException as error:
+ if isinstance(error, (StopIteration,
+ logoerror)):
+ raise error
+ else:
traceback.print_exc()
- raise logoerror("%s %s %s %s" % (self.cfun.name,
- _("doesn't like"), str(tte.bad_value),
- _("as input")))
- except Exception as error:
- if isinstance(error, (StopIteration,
- logoerror)):
- raise error
- else:
- traceback.print_exc()
- self.tw.showlabel('status', '%s: %s'
- % (type(error).__name__, str(error)))
+ self.tw.showlabel('status', '%s: %s'
+ % (type(error).__name__, str(error)))
return False
- else:
- return False
except StopIteration:
if self.tw.running_turtleart:
# self.tw.turtles.show_all()