2016-06-27 4 views
0
def get_par(filename_or_pard): 

    # automatically search for the path 

    Path = GetPathOsmosisPth() 
    f = open(Path,'r') 

    TheLines = f.readlines() 
    Path = TheLines[0][0:-1] + '/osmosis/' 
    f.close() 

    # Get the name of the path to the data 
    ThePath = locate_dir('GeneralParameters',Path) 
    Thepdata = ThePath.split('GeneralParameters')[0]  #(line 216 - This line gives error) 

    # check if we do not have provided an external data path 
    DataDir = CheckInputDataDirectory() 
    #DataDir = 'Data_CS' 
    if DataDir is None: 
     pdata = Thepdata 
    else: 
     pdata = os.path.join(Path,DataDir) 

    # search for the file 

    if isstring(filename_or_pard): 
     # myprintv("isstring: ", filename_or_pard) 
     # creating the dictionary 
     ThePath = locate(filename_or_pard,pdata) 
     f = ThePath + os.path.sep + filename_or_pard 
     pard = create_par_structure(f) 

     # creating the class par_struct 
     par = par_struct(pard) 

     # store the filename with the parameters in the par structure 

     par.TheFilename = filename_or_pard 
    else: 
     # myprint2v("not isstring: ", filename_or_pard, type(filename_or_pard)) 
     # the dictionary is provided as input 
     pard = filename_or_pard 

     # creating the class par_struct 
     if isdict(pard): 
      par = par_struct(pard) 
      par._FromStringToTrueType() 
     else: 
      par = pard 

    # if parameters.txt, set the path_data 

    if hasattr(par,'path_data'): 
     par.path_data = pdata 
     par.root_path = Path 
     # myprintv("pdata: ", par.path_data) 

    if hasattr(par,'path_packages'): 
     par.path_packages = os.path.join(Path,par.path_packages) 

    # returning the result 
    return par 

Когда я запускаю свою программу, я получаю сообщение об ошибке с использованием обоих методов split, используемых выше. Ошибка отображаемая«AttributeError: объект« NoneType »не имеет атрибута« split »«

линия 216, в get_par Thepdata = ThePath.split ('GeneralParameters', Path) [0] AttributeError: объект 'NoneType' не имеет атрибута 'разбить'

Я считаю, что я делая небольшую ошибку, но я не знаю, только начинаю программировать.

Благодарим Вас заранее

+1

Где находится 'locate_dir'? – bernie

+1

'locate_dir()' return 'None'. Добавьте эту функцию к вашему вопросу. –

+0

Пожалуйста, добавьте код к вашему вопросу и внесите в него правильный формат! Вы случайно получаете сообщение «Warning in locate: каталог не найден!»? Обратите внимание, что вы должны вызывать ошибку, если вы ничего не хотите возвращать, но вызов кода ожидает чего-то. – MisterMiyagi

ответ

0

Ваша функция возвращает locate_dirNone. Это происходит, если pattern никогда не соответствует пути. Поскольку вы используете свою собственную функцию печати myprinte, вы, вероятно, подавляете сообщение об ошибке.

Предполагается, что ваш locate_dir в настоящее время отформатирован, как показано ниже. Форматированных на основе вашего комментария:

def locate_dir(pattern, r=os.curdir): 
    ok = 0 
    for path, dirs, files in os.walk(os.path.abspath(r)): 
    if pattern in path: 
     ok = 1 
     return path 
    if ok == 0: # ok will always be 0 here, you would have left the loop otherwise 
    myprinte("Warning in locate: No directory found!") 
    # end of function *implicitly* returns None (i.e. returns "Nothing") 

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

def locate_dir(pattern, r=os.curdir): 
    for path, dirs, files in os.walk(os.path.abspath(r)): 
    if pattern in path: 
     return path 
    raise FileNotFoundError("No file found for pattern %s" % pattern) 

Таким образом, вы случайно не подавляете ошибки.

+0

Я хочу добавить, что когда я запускаю тот же код на оконном компьютере, он работает правильно, но когда я запускаю его на Ubuntu, он дает мне ошибку атрибута. Мне не удалось это исправить. Если вы можете это сделать, я пришлю вам код по электронной почте, если вы найдете для меня какое-то время. Благодарим вас заранее –

+0

@FazalHaq Проблема в целом в вашей среде. А именно, нет пути, соответствующего вашему желаемому шаблону. Никакой код исправления не создаст этот шаблон. Только вы можете знать, в какой среде вы работаете, и как ее исправить. – MisterMiyagi

+0

Спасибо за ваш добрый ответ и время, пощаженное для меня. Я буду проверять проблему в глубину. Может быть, когда-нибудь я приеду к некоторым плодотворным результатам. Спасибо всем за такое приятное сотрудничество. –

Смежные вопросы