Tôi có một tập lệnh trong đó người dùng được nhắc nhập tên tệp (của tệp sẽ được mở) và nếu tệp không tồn tại trong thư mục hiện tại, người dùng sẽ được nhắc lại. Dưới đây là phiên bản ngắn:"Mở()" của Python ném các lỗi khác nhau cho "tệp không tìm thấy" - cách xử lý cả hai ngoại lệ?
file = input("Type filename: ")
...
try:
fileContent = open(filename, "r")
...
except FileNotFoundError:
...
Khi tôi kiểm tra kịch bản của tôi trên hệ điều hành MacOS X của tôi bằng Python 3.3x nó làm việc hoàn toàn tốt đẹp khi tôi gõ tên tập tin sai về mục đích (nó thực thi bộ dưới "mong đợi").
Tuy nhiên, khi tôi muốn chạy mã của mình trên máy tính Windows bằng Python 3.2x, tôi gặp lỗi nói rằng "FileNotFoundError" không được xác định. Vì vậy, Python 3.2 trên Windows nghĩ rằng "FileNotFoundError" là một biến và các chương trình thoát với một lỗi.
Tôi đã tìm ra rằng Python 3.2 trên Windows sẽ ném "IOError" nếu tên tệp đầu vào không hợp lệ. Tôi đã thử nghiệm nó trên máy Linux của tôi trong Python 2.7, và nó cũng là một IOError.
Vấn đề của tôi là bây giờ, rằng mã với
except "FileNotFoundError":
sẽ không chạy trên Windows của Python 3.2, nhưng nếu tôi thay đổi nó để
except "IOError":
nó sẽ không hoạt động trên máy Mac của tôi nữa không.
Tôi làm cách nào để khắc phục sự cố? Cách duy nhất tôi có thể nghĩ đến là sử dụng chỉ except
mà tôi thường không muốn.
Điều này không phải do Mac/Windows, đó là phiên bản * của Python. Tôi cũng sẽ điều tra 3.2/3.3 trên OS X (và 3.3 trên Windows), tham khảo nhật ký thay đổi và sau đó sửa lại câu hỏi/tiêu đề nếu thích hợp. –