我々は何もしていない機能を必要とし、ちょうど(一部のハンドラの仕事をいくつかのシステムでは)、私たちは次のようなコードを書くことは非常に直感的にすることができ例外がスローされます:
def func():
raise Exception("this is a exception")
それは簡単な関数は、我々はラムダでは達成したいと考えていることだ、自然に、次のコードを書きました:
lambda :raise Exception("this is a exception")
残念ながら、これは~~~になります十分ではありませんSyntaxError: invalid syntax
間違っています。具体的な理由は見ることができますPythonのラムダを
いくつかの利用可能な賢いが、無用の次のコレクションプラクティス:
この方法の一つ
func = lambda: (_ for _ in ()).throw(Exception('this is an exception'))
方法二
あなたは、例外情報が何であるかを気にしない場合:
func = lambda: 1/0
当然のことながら、この機能がスローされますZeroDivisionError
。実際には、このアプローチは、例えば、のように書くこともでき、クラスを表します。
func = lambda : [][0]
このような実装は、ラムダ式の裏に書かれている例外がスローされます
メソッドスリー
ペンシルバニア州に非常に否定的な方法、のみ適しpython3.x
func = lambda : exec('raise(Exception("this is an exception"))')
方法4:
まだそれを読んでいません
# python2.x
type(lambda:0)(type((lambda:0).func_code)(
1,1,1,67,'|\0\0\202\1\0',(),(),('x',),'','',1,''),{}
)(Exception())
若しくは
# python3.x
type(lambda: 0)(type((lambda: 0).__code__)(
1,0,1,1,67,b'|\0\202\1\0',(),(),('x',),'','',1,b''),{}
)(Exception())
最終アドバイス:注意して、することができますプレイ!
ます。https://www.cnblogs.com/taceywong/p/9264963.htmlで再現