2014-02-03 2 views
0

У меня проблема с этой функцией. Когда я пытаюсь запустить код, вы открываете внешнюю функцию «return».Функция «return» вне функции - Python

Спасибо.

def find_details(id2find): 
    surfistas_f = open("surfing_data.csv") 
    for each_line in surfistas_f: 
     s={} 
     (s['id'], s['nome'],s['pais'],s['media'],s['prancha'],s['idade'])= each_line.split(";") 
     if id2find == int(s['id']): 
      surfistas_f.close() 
      return(s) 
surfistas_f.close() 
return({}) 

lookup_id=int(input(" Entre com a identificação do surfista: ")) 
surfer = find_details(lookup_id) 

if surfer: 
    print("ID:   " + surfer['id']) 
    print("Nome:   " + surfer['nome']) 
    print("País:   " + surfer['pais']) 
    print("Média:  " + surfer['media']) 
    print("Prancha:  " + surfer['prancha']) 
    print("Idade:  " + surfer['idade']) 
+5

Файл закрыть и возвращающие утверждения ошибочно отступом. – shaktimaan

ответ

1

Пожалуйста, обратите внимание на формат кода. Вам необходимо 4 дополнительное пространство перед этими 2 строками:

surfistas_f.close() 
return({}) 
+0

Или один 'tab'! : P – Kroltan

+1

Точнее, он должен иметь тот же отступ, что и строки выше. – poke

+2

В соответствии с пространствами PEP8 предпочтительнее по вкладкам. http://www.python.org/dev/peps/pep-0008/#tabs-or-spaces – IanAuld

3

return({}) находится вне функции find_details. Вам просто нужно отступить так:

def find_details(id2find): 
    surfistas_f = open("surfing_data.csv") 
    for each_line in surfistas_f: 
     s={} 
     (s['id'], s['nome'],s['pais'],s['media'],s['prancha'],s['idade'])= each_line.split(";") 
     if id2find == int(s['id']): 
      surfistas_f.close() 
      return(s) 
    surfistas_f.close() 
    return({}) 

lookup_id=int(input(" Entre com a identificação do surfista: ")) 
surfer = find_details(lookup_id) 

if surfer: 
    print("ID:   " + surfer['id']) 
    print("Nome:   " + surfer['nome']) 
    print("País:   " + surfer['pais']) 
    print("Média:  " + surfer['media']) 
    print("Prancha:  " + surfer['prancha']) 
    print("Idade:  " + surfer['idade']) 
+0

Справа! Спасибо, Гезим. Я привык к отстукам. – user3267076

2

Пространство и отступы очень важны в Python. Python не использует фигурные скобки, как и другие языки, так что он идентифицирует, какие строки являются частью того, что является отступом. Например, эта простая функция:

def print_nums(num): 
    for i in range(num): 
     print(i) 

можно рассматривать таким образом, если Python используется фигурные скобки (я содрогаюсь при мысли):

def print_nums(num): 
{ 
    for i in range(num): 
    { 
     print(i) 
    } 
} 

Результаты этого метода была бы кардинально изменить, если мы изменили его чтобы:

def print_nums(num): 
     for i in range(num): 
     print(i) 

, которая будет, как показано со скобами:

def print_nums(num): 
{ 
     for i in range(num): 
     { 
     } 
     print(i) 
} 

Итак, убедитесь, что все правильно отступы очень важны в Python. Таким образом, для вашего метода return имеет отступы на том же уровне, что и имя метода, которое означает, что интерпретатор Python будет считать его вне метода. Вы не можете использовать ключевое слово return вне метода/функции, поэтому вы видите ошибку, которую видите. Однако вы увидите неожиданные результаты, если бы вы использовали print() или еще что-то еще в конце.

Я также хотел бы предложить использовать with заявление Питона для открытия файла, он обрабатывает закрытие и открытие файла для вас:

with open('surfing_data.csv') as sufista_s: 
    do_stuff() 
+0

Справа. Tnks для вашего ответа! – user3267076

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