让我首先说:这是用于深奥目的 - 不是生产代码。我正在用一行 Python 代码做一些事情,因此我需要表达式而不是语句。(编辑:我正在将代码机械编译成单行(主要是)等效的 Python 代码,BitBucket - onelinepython。请注意,它正在进行中,因此我在最初提到它时保持沉默)
我基本上想做两件事:
调用一个引发我选择的异常实例的函数,例如:
raise_exception(WhateverException())
在封闭的环境中运行一个函数,我可以在其中获取引发的异常实例,如果引发了异常实例,否则返回被调用函数的返回值。例如:
has_exception, return_or_exception = check_exception(f, param1, param2, ...)
理想情况下,我想用一些默认库或内置函数来做到这一点(不管我有多少要混蛋它的预期用途)。我不需要与我提供的示例具有完全相同签名的函数,只是我可以将其分解成足够接近的东西。不过,我确实有一个限制:不使用 eval() 或等效函数。
编辑:我知道我可以定义自己的函数来执行此操作,但是他们仍然必须遵循它们是单个表达式的限制。因此,在函数定义中使用raise
和内部的解决方案已被淘汰。try
不幸的是,函数定义、raise-statement 和 try-blocks 是语句而不是表达式。
至于我尝试过的任何解决方案。答案还没有。我最接近如何解决这个问题的想法是滥用unittest
断言功能,但我认为这是一个死胡同。
编辑 2:为了清楚起见,我可以使用在其代码中某处使用raise
-statements 或try
-blocks 的模块或其他模块。我的目标是获取一些代码并将其转换为等效的单行代码(包括我可能正在使用的任何辅助函数)。但由于我希望它在默认安装的 Python 上工作,我只想使用默认库。