【发布时间】:2020-01-27 18:21:55
【问题描述】:
我使用这个页面来创建 lambda 异常处理程序。 How to catch exceptions using python lambdas
但是当我在我的代码中实现这个时
#exception handler
def executeFunction(x, y):
try:
z = lambda x,y : int(x) + int(y)
return z
except:
print('Exception caught')
if str(dzialanie)=='+':
print("result is: " + str(executeFunction(input("input 1st number: "), input("input 2nd number: "))))
...
我收到了这条消息:
添加两个数字类型“+” 减去两个数字类型'-' 乘以两个数字类型'*' 将两个数字相除,输入“/” 退出类型 'q' 您要选择哪种操作? + 输入第一个数字:13 输入第二个数字:13 结果是:.executeFunction.. at 0x00000162200C4288> 添加两个数字类型“+” 减去两个数字类型'-' 乘以两个数字类型'*' 将两个数字相除,输入“/” 退出类型 'q' 您要选择哪种操作?怎么了?
【问题讨论】:
-
你创建了 lambda 但从不执行它:
z(x, y) -
你确定你不只是想要
z = x + y吗?我不明白您为什么需要使用lambda表达式或def语句来定义任何函数。 -
如果您要做的只是打印一条通用消息来确认它,请不要捕获异常。要么处理异常,要么让它不被捕获。
-
嗯,因为这就是你的代码正在做的事情,定义一个函数(一个 lambda 只是一个函数)然后你返回它。即,你基本上是先做
z = lambda x,y : int(x) + int(y)然后return z,你期待是什么?请注意,如果要将其分配给名称,则不应使用lambda。这违背了 lambda 的全部目的,即创建一个匿名函数。它明确违反 PEP8 风格指南。只需使用def。 -
也许您想创建一个运算符和函数字典:
calc_functions['+'] = lambda x,y : int(x) + int(y)然后稍后调用它result = executeFunction(calc_functions[dzialanie], input1, input2))这样您就可以捕获未找到键或除以零的异常?