2010-06-14 37 views
5

Tôi đang sử dụng bản in mới từ Python 3.x và tôi quan sát thấy mã sau đây không biên dịch do số end=' '.Làm thế nào để viết một kịch bản Python 2.6+ thất bại một cách duyên dáng với Python cũ hơn?

from __future__ import print_function 

import sys 
if sys.hexversion < 0x02060000: 
    raise Exception("py too old") 

... 
print("x",end=" ") # fails to compile with py24 

Làm cách nào để tiếp tục sử dụng cú pháp mới nhưng làm cho tập lệnh không thành công? Có bắt buộc phải gọi một tập lệnh khác và chỉ sử dụng cú pháp an toàn trong tập lệnh này không?

+2

Nếu chúng ta có thể gửi một chàng trai trở lại đúng lúc, chúng ta có thể thuyết phục Guido thêm một pragma đẹp "__minimum_python_version __ (2,0)" –

Trả lời

2

Có một số đề xuất trong số question here này, nhưng có vẻ như không dễ dàng. Bạn sẽ phải tạo một kịch bản trình bao bọc.

2

Một cách là viết mô-đun của bạn bằng cách sử dụng câu lệnh in python 2.x, sau đó khi bạn muốn chuyển nó vào python 3, bạn sử dụng tập lệnh 2to3. Tôi nghĩ rằng có những kịch bản cho chuyển đổi 3to2 là tốt, mặc dù họ có vẻ ít trưởng thành hơn 2to3.

Dù bằng cách nào, trong các tập lệnh biggers, bạn phải luôn tách biệt logic miền và đầu vào/đầu ra; theo cách đó, tất cả các câu lệnh/chức năng in được gộp lại với nhau trong một tệp duy nhất. Để ghi nhật ký, bạn nên sử dụng mô đun ghi nhật ký.

+2

Toàn bộ ý tưởng là viết mã sẵn sàng Python 3 sẽ làm việc với 2.6+ python. lập kế hoạch để chuyển đổi trong tương lai. – sorin

8

Phương pháp dễ dàng cho Python 2.6 là chỉ để thêm một dòng như:

b'You need Python 2.6 or later.' 

vào lúc bắt đầu của tập tin. Điều này khai thác một thực tế là byte literals đã được giới thiệu trong 2.6 và vì vậy bất kỳ phiên bản trước đó sẽ nâng cao một SyntaxError với bất kỳ tin nhắn bạn viết cho là theo dõi ngăn xếp.

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