私はPythonのシグナルモジュールを学びたいと考えています。以下は、印刷されますが、それは例外を発生させない機能timeoutFn(foo)
を呼び出すことでシグナルモジュールで例外が発生しない
def timeoutFn(func, args=(), kwargs={}, timeout_duration=1, default=None):
import signal
class TimeoutError(Exception):
pass
def handler(signum, frame):
print "Trying to raise exception"
raise TimeoutError
# set the timeout handler
signal.signal(signal.SIGALRM, handler)
signal.alarm(timeout_duration)
try:
result = func(*args, **kwargs)
except TimeoutError as exc:
result = default
finally:
signal.alarm(0)
return result
と、
import time
def foo():
for i in range(10):
time.sleep(0.5)
print "Sleeping"
:以下の例を考えてみてください。
TimeoutErrorを上げてはいけませんか?しかし、それが印刷されるのは
Sleeping Trying to raise exception
です。
正しく動作します。あなたは何を期待していますか?その例外は発生しましたか? – Trilliput
"例外を発生させようとしています"というメッセージが表示された後、私はTimeoutErrorを受け取りません – Aditya