0

次のプログラム ステートメントがあります (program1.py)

私はプログラム1を持っています:

try:

except:

別のプログラム 2 (program2.py) があります。

def something: 
      print hello

プログラム 1 がプログラム 2 にインポートされるときに、そのプログラム 1 がプログラム 2 をラップする方法はありますか?

try:
   def something: 
          print hello    # all program 2 components

except:

私はこれを行う方法について混乱しています。

4

4 に答える 4

0

program2.py

from contextlib import contextmanager

@contextmanager
def tryer():
    try:
        yield  # code within with statement runs here
    except:
        print "Failed!

program1.py

from program2 import tryer

with tryer():
    print 'Hello, World!'
于 2012-11-06T09:07:32.820 に答える
0

program1.py では、関数を呼び出す必要がありsomethingます。これにより、(関数呼び出しによって) 新しい関数が try-except ブロックにラップされます。ネットの基本情報からモジュール間プログラムフローの扱いを理解することをお勧めします。単純な解析としてではなく、関数呼び出しとして表示する必要があります。

HTH。

以下のリンクが理解に役立ちます。
Python と統合のモジュール。
同様のスタックオーバーフローの質問

于 2012-11-06T07:43:08.453 に答える
0

インポートを使用できます

program1.py:

from program2 import something
try:
    something()
exception:
    # Some more code

program2.py:

def something:
    print 'Hello, World!'
于 2012-11-06T07:43:33.600 に答える
0

これについて私が提案する方法は、デコレータを使用することです。

def tryit(fn):
    def wraps(*args, **kwargs):
        try:
            fn(*args, **kwargs)
        except Exception, e:
            print e
    return wraps

def doStuff(x, y):
    return x / y

@tryit
def main(arg1, arg2):
    print doStuff(arg1, arg2)

if __name__ == "__main__":
    main(1, 10.0)
    main(100, 0)

出力

0.1
integer division or modulo by zero

あなたのロジックを作り直す必要があるかもしれませんが、最終的にはそれだけの価値があると思います.

于 2012-11-06T07:47:06.323 に答える