2013-02-20 2 views
0

У меня есть сценарий, который я собрал, который генерирует несколько файлов, заполненных json-данными, путем вызова другого модуля python. Затем я хочу иметь возможность импортировать их после их создания и делать с данными, которые они содержат.Как остановить Python от проверки файлов после выполнения

Проблема в том, что когда я пытаюсь запустить этот скрипт, он жалуется на файлы, которые не существуют. Я думаю, потому что Python проверяет все файлы, которые нужно открыть перед выполнением кода, независимо от того, где открытые операторы попадают в код. Есть ли способ обойти это, поэтому он не будет пытаться открыть файлы до тех пор, пока генератор не вызовет модуль для их создания? Пример кода ниже:

#!/usr/bin/python 

import os, sys 
import json 
import random 
import ships_levels_stats_generator 

def main(): 
    number = 10 
    ships_levels_stats_generator.interface(str(number)) 

    for i in range(0, number): 
     with open('../Test/attack%s.json' % i) as attack_json: 
      attack_data = json.load(attack_json) 
     with open('../Test/hp%s.json' % i) as hp_json: 
      hp_data = json.load(hp_json) 
     with open('../Test/repair%s.json' % i) as repair_json: 
      repair_data = json.load(repair_json) 

    for key in attack_data.iterkeys(): 
     if len(attack_data[key]) < 20: 
      print "Under 20." 
     elif len(attack_data[key]) < 30: 
      print "Under 30." 
     elif len(attack_data[key]) < 60: 
      print "Under 50." 
     elif len(attack_data[key]) < 80: 
      print "Under 80." 
     else: 
      print "Over 80." 

ответ

1

Это просто проблема с отступом: цикл for должен быть отступом, чтобы быть частью вашей основной функции. Как и сейчас, он запускается, когда файл загружается каждый раз.

+0

К сожалению, это только я не получаю право форматирования в этом. Он имеет отступы в фактическом коде. –

+0

@ KrisGriebe Тогда проблема не в коде, который вы опубликовали. Python не пытается открыть какие-либо файлы, пока не выполнит вызов 'open', так что это не проблема. –

+0

Трудно сказать, не видя полного кода, но это может быть проблема с разрешениями, или может быть, что код имеет условный, пустой цикл или возвращает, так что open никогда не вызывается. –

0

Вы никогда не называйте ships_levels_stats_generator.interface(), который presumeably где вы создаете файлы, Потерять def main():

+0

Что значит, я никогда не называю это? Это прямо там .... –