2016-11-06 4 views
0

を変更せずに例外を発生しますPythonのトリガ機能は、コードブロックとそれに

1 import re 
2 import sys 
3 import traceback 
4 
5 def foo(arg): 
6  if isinstance(arg, dict): 
7   return arg.get('key', 0) 
8  return 0 
9 
10 arg = {} 
11 
12 
13 
14 try: 
15  foo(arg) 
16 except Exception: 
17  lines = traceback.format_exception(*sys.exc_info()) 
18  for line in lines: 
19   m = re.match(r' File .*, line (\d+), in foo\n.*\n', line) 
20   if m and int(m.group(1)) < 5: 
21    print("Foo threw!") 
22    sys.exit() 
23  raise 
24 else: 
25  sys.stderr.write("foo did not throw!") 

質問です:私はこれで到達することができ、最終的なコードの制御フローを作成し、ライン10から14の間でいくつかのコードのロジックを追加することができます、Foo threw!が印刷されましたか?注意してください.1行目〜10行目と14行目以降のコードは変更できません。

私はライン20、 < 5に対してテスト、「保護」で、それは ifので、うまくいきませんでしたそれで foo()を置き換え、例外を発生させる別の関数を書くことを試みた

例外が行の前に起こった 5.

+0

あなたの質問は何ですか? 10行目と14行目の間にコードを書くようにお願いしていますか?もしそうなら、あなたは何を試しましたか、どこに難易度がありますか? –

答えて

0

いいえ、これらの行ので:

m = re.match(r' File .*, line (\d+), in foo\n.*\n', line) 
if m and int(m.group(1)) < 5 

は、エラーがfooの前に来るのライン1-4で発生しなければならないので、あなたはfooの最初の行にエラーを追加する場合それも可能ではないということを意味します。

+0

ありがとう、私は 'def foo(arg):'を4行目に移動するのはどうですか? – Bin

+0

私はそうは思わない、私はエラーが 'def'行に投げられるとは思わない。 –

関連する問題