最初に言っておきますが、これは難解な目的で使用するためのものであり、製品コードではありません。私はPythonコードの1行で何かをして遊んでいるので、ステートメントではなく式が必要です。(編集:コードを(ほとんど)同等のPythonコード、BitBucket - onelinepythonの単一行に機械的にコンパイルすることに取り組んでいます。非常に進行中の作業であることに注意してください。したがって、最初に言及することは控えています)
私は基本的に2つのことをしたい:
次のような選択した例外インスタンスを発生させる関数を呼び出します。
raise_exception(WhateverException())
囲まれた環境で関数を実行すると、発生した例外インスタンスが発生した場合はそれを取得でき、そうでない場合は呼び出された関数の戻り値を取得できます。例えば:
has_exception, return_or_exception = check_exception(f, param1, param2, ...)
理想的には、これをデフォルトのライブラリまたは組み込み関数で実行したいと考えています (その意図された使用法をどれだけ野放しにする必要があるとしても)。私が提供した例とまったく同じシグネチャを持つ関数は必要ありません。十分に近いものにマングルできるものだけです。ただし、1 つの制限があります。eval() または同等の関数を使用しないことです。
編集:これを行うために独自の関数を定義できることは知っていますが、それでも単一の式であるという制限に従う必要があります。raise
そのため、関数定義のtry
内部で使用するソリューションはアウトです。関数定義、raise ステートメント、try ブロックは残念ながらステートメントであり、式ではありません。
私が試した解決策については。答えはまだありません。これを解決する方法のアイデアに最も近いのは、unittest
のアサート機能を誤用することですが、それは行き止まりだと思います。
EDIT 2:明確にするために、コードのどこかでraise
-statements または-blocksを使用するモジュールなどを使用しても問題ありません。try
私の目標は、いくつかのコードを取得し、それを同等の 1 行のコード (使用している可能性のあるヘルパー関数を含む) に変換することです。しかし、これを Python のデフォルトのインストールで動作させたいので、デフォルトのライブラリのみを使用したいと考えています。