異常賢いが、無用によるPythonのラムダ投げます

我々は何もしていない機能を必要とし、ちょうど(一部のハンドラの仕事をいくつかのシステムでは)、私たちは次のようなコードを書くことは非常に直感的にすることができ例外がスローされます:

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で再現

おすすめ

転載: blog.csdn.net/weixin_33881050/article/details/94198035