Nếu tôi có một tập lệnh Python yêu cầu ít nhất một phiên bản Python cụ thể, cách chính xác để thất bại một cách duyên dáng khi một phiên bản Python trước đó được sử dụng để khởi chạy tập lệnh là gì?
Làm cách nào để tôi có quyền kiểm soát đủ sớm để đưa ra thông báo lỗi và thoát?
Ví dụ: tôi có một chương trình sử dụng toán tử ternery (mới trong 2.5) và các khối "với" (mới trong 2.6). Tôi đã viết một thói quen kiểm tra phiên bản phiên dịch nhỏ đơn giản, đó là điều đầu tiên mà kịch bản sẽ gọi ... ngoại trừ nó không đi xa đến thế. Thay vào đó, tập lệnh thất bại trong quá trình biên dịch python, trước khi các thói quen của tôi thậm chí được gọi. Do đó, người sử dụng tập lệnh nhìn thấy một số tracebacks lỗi synax rất khó hiểu - điều mà khá nhiều yêu cầu một chuyên gia suy luận rằng đó chỉ đơn giản là trường hợp chạy phiên bản Python sai.
Tôi biết cách kiểm tra phiên bản Python. Vấn đề là một số cú pháp là bất hợp pháp trong các phiên bản cũ hơn của Python. Hãy xem xét chương trình này:
import sys
if sys.version_info < (2, 4):
raise "must use python 2.5 or greater"
else:
# syntax error in 2.4, ok in 2.5
x = 1 if True else 2
print x
Khi chạy dưới 2.4, tôi muốn kết quả này
$ ~/bin/python2.4 tern.py
must use python 2.5 or greater
và không phải kết quả này:
$ ~/bin/python2.4 tern.py
File "tern.py", line 5
x = 1 if True else 2
^
SyntaxError: invalid syntax
(Kênh cho đồng nghiệp.)