2011-10-20 28 views
21

Khi chạy đoạn mã sau (bằng Python 2.7.1 trên mac với Mac OS X 10,7)Python lỗi câu lệnh return " 'trở lại' bên ngoài chức năng"

while True: 
    return False 

tôi nhận được lỗi sau

SyntaxError: 'return' outside function 

Tôi đã kiểm tra cẩn thận các tab và/hoặc không gian không đúng. Tôi có thể xác nhận rằng mã không thành công với lỗi ở trên khi tôi sử dụng 4 dấu ngoặc kép được đề nghị. Hành vi này cũng xảy ra khi trả lại được đặt bên trong các câu lệnh kiểm soát khác (ví dụ: nếu, cho, v.v.).

Mọi trợ giúp sẽ được đánh giá cao. Cảm ơn!

+14

Thông dịch viên nói, bạn không ở trong một chức năng. Các câu lệnh điều khiển không phải là hàm, bạn định nghĩa một hàm với 'def'. –

+2

Có thể bạn đang tìm kiếm 'break'. –

+0

Tôi sử dụng 'yield' mang lại cho tôi cùng một lỗi, lý do là như nhau, sẽ được trong một chức năng .. – 8090PZ

Trả lời

40

Các trở tuyên bố chỉ có ý nghĩa trong các chức năng:

def foo(): 
    while True: 
     return False 
+1

Raymond, bạn đã nhận được rất nhiều điểm rep mà quầy của bạn quay trở lại 0? – PaulMcG

+0

@PaulMcGuire: nhận xét của bạn làm tôi bối rối. –

+0

@PaulMcGuire Tài khoản của anh ta chỉ tồn tại trong ba ngày. – agf

11

Để phá vỡ một vòng lặp, sử dụng break thay vì return.

Hoặc đặt vòng lặp hoặc cấu trúc điều khiển vào một hàm, chỉ các hàm mới có thể trả về giá trị.

+0

Khá đúng, cảm ơn bạn rất nhiều @Jurgen – Jeff

12

Sử dụng quit() trong ngữ cảnh này. break dự kiến ​​sẽ nằm trong vòng lặp và return sẽ nằm trong một hàm.

+0

Điều này hoạt động trong trường hợp bạn chỉ muốn dừng tập lệnh, như bạn sẽ làm với void trở lại. Tôi muốn sử dụng sys.exit() mặc dù, vì sau đó một trạng thái thoát có thể được xác định. Kiểm tra câu hỏi này: http://stackoverflow.com/questions/543309/programatically-stop-execution-of-python-script – gcucurull

1

Theo tài liệu trên báo cáo return, return chỉ có thể xảy ra được lồng trong cú pháp theo định nghĩa hàm. Điều này cũng đúng cho yield.

Các vấn đề liên quan