Hướng dẫn try except python 2 vs 3 - thử ngoại trừ python 2 vs 3
Tôi muốn giữ và sử dụng giá trị lỗi của một ngoại lệ trong cả Python 2.5, 2.7 và 3.2. Show
Trong Python 2.5 và 2.7 (nhưng không phải 3.x), điều này hoạt động:
Trong Python 2.7 và 3.2 (nhưng không phải trong 2.5), điều này hoạt động:
Có mã nào cho mục đích này hoạt động trong cả 2.5, 2.7 và 3.2 không? Cảm ơn Các phiên bản Python rất sớm đã sử dụng các chuỗi đơn giản để có nghĩa là lỗi. Sau đó, Python cho phép nâng cao các lớp học tùy ý và thêm các lớp ngoại lệ chuyên dụng vào thư viện tiêu chuẩn. Vì lý do tương thích ngược, một số thực hành không dùng nữa vẫn được phép trong Python 2. Điều này thể hiện sự nhầm lẫn cho người học ngôn ngữ và ngăn chặn một số tối ưu hóa hiệu suất. Python 3 loại bỏ các thực hành không dùng nữa. Nó cũng củng cố thêm mô hình ngoại lệ. Các trường hợp ngoại lệ hiện là các trường hợp của các lớp chuyên dụng và chứa tất cả thông tin về lỗi: loại, giá trị và dấu vết. Chương này đề cập đến tất cả các thay đổi liên quan đến ngoại lệ cần thiết để bắt đầu hỗ trợ Python 3. Cú pháp ____10 mới
Trong Python 2, cú pháp để bắt các ngoại lệ là 2 hoặc 3 khi các đối tượng ngoại lệ được mong muốn. 4 có thể là một tuple, như trong, ví dụ, 5.Điều này có thể dẫn đến các lỗi khó có điểm: lệnh 6 (lưu ý thiếu dấu ngoặc đơn) sẽ chỉ xử lý 7. Nó cũng sẽ gán đối tượng ngoại lệ cho tên 8, theo dõi tích hợp.Để khắc phục điều này, Python 2.6 đã giới thiệu một cú pháp thay thế: 9. Trong Python 3, cú pháp cũ không còn được phép.Bạn sẽ cần chuyển sang cú pháp mới. Fixer được đề xuất hoạt động khá đáng tin cậy và nó cũng khắc phục vấn đề ngoại lệ lặp lại được mô tả dưới đây.Iterating Exceptions problem described below. Cú pháp raise ValueError, 'invalid input' raise ValueError, 'invalid input', some_traceback 0 mới
Tuyên bố của Python 2, ____ ____20 được thiết kế vào thời điểm các trường hợp ngoại lệ của các lớp và một loại ngoại lệ, các thành phần giá trị và tracback là ba đối tượng riêng biệt: raise ValueError, 'invalid input' raise ValueError, 'invalid input', some_traceback Trong Python 3, một đối tượng duy nhất bao gồm tất cả thông tin về một ngoại lệ: raise ValueError('invalid input') e = ValueError('invalid input') e.__traceback__ = some_traceback raise e Python 2.6 cho phép biến thể đầu tiên. Đối với lần thứ hai, tái tạo lại một ngoại lệ, thư viện tương thích: Six Library bao gồm một trình bao bọc tiện lợi hoạt động trong cả hai phiên bản:Compatibility library: six library includes a convenience wrapper that works in both versions: import six six.reraise(ValueError, 'invalid input', some_traceback) Các trình sửa chữa được đề xuất sẽ tự động thực hiện các chuyển đổi này và khá đáng tin cậy, nhưng hãy xác minh các thay đổi kết quả. Bị bắt gặp ngoại lệ "phạm vi"
Như đã thảo luận trước đây, trong Python 3, tất cả thông tin về một ngoại lệ, bao gồm cả dấu vết, được chứa trong đối tượng ngoại lệ. Do Traceback giữ các tham chiếu đến các giá trị của tất cả các biến cục bộ, việc lưu trữ một ngoại lệ trong một biến cục bộ thường tạo thành một chu kỳ tham chiếu, giữ cho tất cả các biến cục bộ được phân bổ cho đến khi thông qua bộ sưu tập rác tiếp theo.discussed previously, in Python 3, all information about an exception, including the traceback, is contained in the exception object. Since the traceback holds references to the values of all local variables, storing an exception in a local variable usually forms a reference cycle, keeping all local variables allocated until the next garbage collection pass. Để ngăn chặn vấn đề này, để trích dẫn từ tài liệu Python,:Python’s documentation:
Thật không may, Fix Trình sửa chữa tự động: Python-Modernize không cung cấp bộ sửa lỗi cho thay đổi này. Vấn đề này dẫn đến một raise ValueError, 'invalid input' raise ValueError, 'invalid input', some_traceback3 lớn khi các bài kiểm tra được chạy. Khi bạn thấy lỗi này, hãy áp dụng bản sửa lỗi được đề xuất - gán một tên khác cho ngoại lệ để sử dụng nó bên ngoài mệnh đề ____1010.Automated fixer: python-modernize does not provide a fixer for this change. This issue results in a loud raise ValueError, 'invalid input' raise ValueError, 'invalid input', some_traceback3 when tests are run. When you see this error, apply the recommended fix – assign a different name to the exception to use it outside the 0 clause.Lặp lại ngoại lệ
Như đã thảo luận trước đây, trong Python 3, tất cả thông tin về một ngoại lệ, bao gồm cả dấu vết, được chứa trong đối tượng ngoại lệ. Do Traceback giữ các tham chiếu đến các giá trị của tất cả các biến cục bộ, việc lưu trữ một ngoại lệ trong một biến cục bộ thường tạo thành một chu kỳ tham chiếu, giữ cho tất cả các biến cục bộ được phân bổ cho đến khi thông qua bộ sưu tập rác tiếp theo. except RuntimeError as (num, message): Để ngăn chặn vấn đề này, để trích dẫn từ tài liệu Python,: except RuntimeError as e: num, message = e.args Khi một ngoại lệ đã được chỉ định bằng cách sử dụng làm mục tiêu, nó sẽ được xóa ở cuối mệnh đề ngoại trừ. Điều này là như thể đã được dịch sang except RuntimeError as (num, message): pass Kiểm tra đầu ra và chia chúng thành nhiều dòng theo cách thủ công. Nâng cao các trường hợp không
Trong Python 3, một đối tượng được sử dụng với raise ValueError, 'invalid input' raise ValueError, 'invalid input', some_traceback0 phải là một ví dụ là raise ValueError('invalid input') e = ValueError('invalid input') e.__traceback__ = some_traceback raise e1, trong khi Python 2 cũng cho phép các lớp kiểu cũ. Tương tự, Python 3 cấm bắt các lớp không Exception trong câu lệnh 0.Tăng các lớp không phải là đã lỗi thời sớm nhất là trong Python 2.0, nhưng mã vẫn có thể được tìm thấy. Mỗi trường hợp cần được xử lý bằng tay. Nếu có một lớp chuyên dụng cho ngoại lệ, hãy làm cho nó kế thừa từ raise ValueError('invalid input') e = ValueError('invalid input') e.__traceback__ = some_traceback raise e3. Nếu không, chuyển sang sử dụng một lớp ngoại lệ chuyên dụng. ________ 34¶ bị loại bỏ
Trong Python 3, một đối tượng được sử dụng với raise ValueError, 'invalid input' raise ValueError, 'invalid input', some_traceback0 phải là một ví dụ là raise ValueError('invalid input') e = ValueError('invalid input') e.__traceback__ = some_traceback raise e1, trong khi Python 2 cũng cho phép các lớp kiểu cũ. Tương tự, Python 3 cấm bắt các lớp không Exception trong câu lệnh 0.Tăng các lớp không phải là đã lỗi thời sớm nhất là trong Python 2.0, nhưng mã vẫn có thể được tìm thấy. Mỗi trường hợp cần được xử lý bằng tay. Nếu có một lớp chuyên dụng cho ngoại lệ, hãy làm cho nó kế thừa từ raise ValueError('invalid input') e = ValueError('invalid input') e.__traceback__ = some_traceback raise e3. Nếu không, chuyển sang sử dụng một lớp ngoại lệ chuyên dụng. ________ 34¶ bị loại bỏ
Trong Python 3, một đối tượng được sử dụng với raise ValueError, 'invalid input' raise ValueError, 'invalid input', some_traceback0 phải là một ví dụ là raise ValueError('invalid input') e = ValueError('invalid input') e.__traceback__ = some_traceback raise e1, trong khi Python 2 cũng cho phép các lớp kiểu cũ. Tương tự, Python 3 cấm bắt các lớp không Exception trong câu lệnh 0.Tăng các lớp không phải là đã lỗi thời sớm nhất là trong Python 2.0, nhưng mã vẫn có thể được tìm thấy. Mỗi trường hợp cần được xử lý bằng tay. Nếu có một lớp chuyên dụng cho ngoại lệ, hãy làm cho nó kế thừa từ raise ValueError('invalid input') e = ValueError('invalid input') e.__traceback__ = some_traceback raise e3. Nếu không, chuyển sang sử dụng một lớp ngoại lệ chuyên dụng. Có một sự khác biệt lớn giữa Python 2 và 3?Python 3 có cú pháp dễ dàng hơn so với Python 2. Rất nhiều thư viện của Python 2 không tương thích về phía trước. Rất nhiều thư viện được tạo ra trong Python 3 để được sử dụng nghiêm ngặt với Python 3. Python 2 không còn được sử dụng kể từ năm 2020.. A lot of libraries of Python 2 are not forward compatible. A lot of libraries are created in Python 3 to be strictly used with Python 3. Python 2 is no longer in use since 2020.
Sự khác biệt giữa Python 2 và Python 3 là gì?Python 3 theo yêu cầu nhiều hơn và bao gồm một hệ thống gõ.Python 2 đã lỗi thời và sử dụng cú pháp cũ hơn cho chức năng in. Mặc dù Python 2 vẫn đang được sử dụng để quản lý cấu hình trong DevOps, Python 3 là tiêu chuẩn hiện tại. Python (mã, không phải rắn) là ngôn ngữ mã hóa phổ biến để học cho người mới bắt đầu. Python 2 is outdated and uses an older syntax for the print function. While Python 2 is still in use for configuration management in DevOps, Python 3 is the current standard. Python (the code, not the snake) is a popular coding language to learn for beginners.
Làm thế nào để bạn biết nếu một tập lệnh là Python 2 hoặc 3?Nếu bạn muốn xác định xem python2 hay python3 đang chạy, bạn có thể kiểm tra phiên bản chính với sys.version_info.major này.2 có nghĩa là python2 và 3 có nghĩa là python3.sys. version_info. major . 2 means Python2, and 3 means Python3.
Sự khác biệt chính giữa Python 2 và 3 là gì?Cú pháp Python 3 đơn giản hơn và dễ hiểu hơn trong khi cú pháp Python 2 tương đối khó hiểu.Python 3 Lưu trữ mặc định các chuỗi là Unicode trong khi các cửa hàng Python 2 cần xác định giá trị chuỗi unicode với U. |