私はちょうど最適であるよりもネストされていると私を殴るコードの塊を書いた。私はこのスタイルを改善する方法についてアドバイスをしたいと思います。特に、「フラットはネストよりも優れています。ネストされたTry/Exceptsのクリーンアップ
for app in apps:
if app.split('.', 1)[0] == 'zc': #only look for cron in zc apps
try:
a = app + '.cron'
__import__(a)
m = sys.modules[a]
try:
min = m.cron_minute()
for job in min:
k.add_interval_task(job[0], 'minute task', r(M_LB, M_UB),
60*job[1],
kronos.method.threaded,(),())
except AttributeError: #no minute tasks
pass
try:
hour = m.cron_hour()
for job in hour:
k.add_daytime_task(job[0], 'day task', range(1, 8), None,
(job[1], r(H_LB, H_UB)),
kronos.method.threaded,(),())
except AttributeError: #no hour tasks
pass
except ImportError: #no cron jobs for this module
pass
編集:下からの提案を組み合わせる は、ここに私の書き換え形です。
for app in apps:
if app.split('.', 1)[0] != 'zc': #only look for cron in zc apps
continue
try:
a = app + '.cron'
__import__(a)
except ImportError: #no cron jobs for this module, continue to next one
continue
m = sys.modules[a]
if hasattr(m, 'cron_minute'):
min = m.cron_minute()
for job in min:
k.add_interval_task(job[0], 'minute task', r(M_LB, M_UB),
60*job[1],
kronos.method.threaded,(),())
if hasattr(m, 'cron_hour'):
hour = m.cron_hour()
for job in hour:
k.add_daytime_task(job[0], 'day task', range(1, 8), None,
(job[1], r(H_LB, H_UB)),
kronos.method.threaded,(),())
ありがとう、これは私が必要としていたものです。私はこの方法でcontinueを使うことを忘れていました。 できるだけ小さくしようとすることについてのアドバイスは意味があります。継続を使用すると、私はそれを行うことができます。書き直された形でははるかに明示的です。 –