Skip to content

Commit

Permalink
[ysh refactor] Make exception handling more precise
Browse files Browse the repository at this point in the history
  • Loading branch information
Andy C committed Jun 3, 2023
1 parent 52986d3 commit b721b50
Showing 1 changed file with 12 additions and 17 deletions.
29 changes: 12 additions & 17 deletions ysh/expr_eval.py
Original file line number Diff line number Diff line change
Expand Up @@ -664,30 +664,25 @@ def EvalPlaceExpr(self, place):
def EvalExprSub(self, part):
# type: (word_part.ExprSub) -> part_value_t

try:
py_val = self.EvalExpr(part.child, loc.Missing)
py_val = self.EvalExpr(part.child, loc.Missing)

if part.left.id == Id.Left_DollarBracket:
s = Stringify(py_val, word_part=part)
return part_value.String(s, False, False)
if part.left.id == Id.Left_DollarBracket:
s = Stringify(py_val, word_part=part)
return part_value.String(s, False, False)

elif part.left.id == Id.Lit_AtLBracket:
elif part.left.id == Id.Lit_AtLBracket:
try:
a = [
Stringify(item, word_part=part)
for item in py_val
]
return part_value.Array(a)
except TypeError as e: # TypeError if it isn't iterable
raise error.Expr('Type error in expression: %s' % str(e),
loc.WordPart(part))
return part_value.Array(a)

else:
raise AssertionError(part.left)
# Same error handling as EvalExpr below
except TypeError as e:
# TODO: Add location info. Right now we blame the variable name for
# 'var' and 'setvar', etc.
raise error.Expr('Type error in expression: %s' % str(e),
loc.Missing)
except (AttributeError, ValueError) as e:
raise error.Expr('Expression eval error: %s' % str(e), loc.Missing)
else:
raise AssertionError(part.left)

def EvalInlineFunc(self, part):
# type: (word_part.FuncCall) -> part_value_t
Expand Down

0 comments on commit b721b50

Please sign in to comment.