Hướng dẫn python unittest cannot import name - python unittest không thể nhập tên
Tôi có mã nguồn Python và cấu trúc mã nhất quán trong hệ thống phân cấp sau: Show
Mã trong các mô -đun như sau: Module1.py
module2.py
module3.py
module1_test.py
Khi tôi chạy python module1_test.py nó không thành công với lỗi nhập:
Không chắc chắn điều gì là sai. Nếu tôi chạy mã nguồn thì tất cả các nhập khẩu đều hoạt động tốt. Nhưng với Python nhất quán, những nhập khẩu tương đối này đang thất bại. Bất cứ ai có thể cho tôi biết tôi đang làm sai lầm gì. Hi. Tôi có một cấu trúc thư mục như thế này:
7 Nhập khẩu 8.Trong 9 Tôi muốn kiểm tra Submodule.py, vì vậy tôi làm điều gì đó như thế này trong một bài kiểm tra:
Khi trong thư mục dự án, tôi chạy các bài kiểm tra như thế này: 0Kết quả là: ________số 8Vì vậy, rõ ràng, khi nhập Ứng dụng, mã nhìn vào 1 của ứng dụng và sẽ không cho phép tôi nhập trực tiếp mô hình con.Tôi có thể làm gì để có thể nhập 8 trực tiếp trong mã của mình? [toc] Cách khắc phục: Bộ nhập khẩu: Không thể nhập tên X X trong Python? Giới thiệuLỗi nhập khẩu có thể xảy ra trong nhiều trường hợp và kịch bản. Một số ví dụ cổ điển về lỗi nhập đã được giải thích trong các hướng dẫn sau:
Trong bài viết này, bạn sẽ tìm hiểu về một lỗi nhập khẩu khác thường xảy ra trong khi bạn đang xử lý các gói và phụ thuộc trong Python. Tóm tắt nhanh để nhập tuyên bố và nhập khẩuTrong Python, tuyên bố & nbsp; ____ 23 & nbsp; phục vụ hai mục đích chính:
Nếu một tuyên bố ____24 gặp khó khăn trong việc nhập thành công một mô -đun, nó sẽ tăng & nbsp; ________ 25. Thông thường, một vấn đề như vậy xảy ra do cài đặt bị lỗi hoặc đường dẫn không hợp lệ, thường sẽ tăng A & nbsp; ____ ____ 26 & nbsp; in & nbsp; Python 3.6 và các phiên bản mới hơn. Xây dựng vấn đềHãy thử hiểu vấn đề tốt hơn một chút trước khi chúng ta đi vào giải pháp! Trong Python & nbsp; ________ 27 & nbsp; lỗi thường xảy ra khi lớp nhập khẩu không thể truy cập được hoặc lớp nhập được nhập vào một phụ thuộc tròn. Sau đây là những lý do chính cho sự xuất hiện của 8
Ví dụ: Hãy xem xét bạn có hai mô -đun: 9 and 0, as shown below. Các tệp này thể hiện cách 1 xảy ra khi có sự phụ thuộc tròn giữa chúng, dẫn đến một tình huống vòng lặp chết.
Hãy cùng xem nội dung của mô -đun đầu tiên:
from x import x_1 def y_1(): print('y1') x_1() def y_2(): print('y2') if __name__ == '__main__': y_1() Hãy cùng xem nội dung của mô -đun thứ hai:
0Bạn có thể tìm thấy sự phụ thuộc tròn không? Output: 1Lỗi xảy ra do cả hai tệp Python, tức là, 4 và 5, đã cố gắng tải nhau đồng thời.Mô -đun 5 đã cố gắng tải mô -đun 4 trong khi mô -đun 4 đã cố gắng tải mô -đun 5. 5 module tried to load the 4
module while the 4 module attempted to load the 5 module.Điều này tạo ra sự phụ thuộc tải tròn dẫn đến một lỗi trong bộ nhớ heap. Để loại bỏ 1, bạn phải loại bỏ sự phụ thuộc tròn.Giải pháp 1: Chỉ cần sử dụng nhập khẩu [Tránh từ X Nhập y]Nói một cách đơn giản, vấn đề đang xảy ra vì chúng tôi đang cố gắng truy cập nội dung của một mô -đun từ một mô -đun khác đồng thời trước khi nội dung của mô -đun được sẵn sàng/khởi tạo. Điều này xảy ra đặc biệt bởi vì bạn đang sử dụng: 1 và ____42.Python có thể phát hiện các phụ thuộc tròn và ngăn chặn các vòng chết. Về cơ bản, những gì xảy ra là một trình giữ chỗ trống được tạo cho mô -đun (nghĩa là, nó không chứa bất kỳ nội dung nào). Sau khi các mô -đun phụ thuộc vào tròn được biên dịch, Python tự động cập nhật mô -đun đã nhập. & NBSP; Tuy nhiên, để Python giải quyết vấn đề phụ thuộc tròn, bạn chỉ phải sử dụng 3 thay vì nhập một nội dung cụ thể của mô -đun với sự trợ giúp của câu lệnh 4. 3 only instead of importing a particular content of the module with the help of the 4 statement. Vì bạn không còn cố gắng tải các nội dung riêng lẻ của mô -đun ở cấp cao nhất, Python có nhiều thời gian để biên dịch mô -đun, do đó tự xử lý sự phụ thuộc tròn. Hãy cùng xem mã sau để hiểu cách thức hoạt động của nó:
2Và trên mô -đun thứ hai!
3Bây giờ, nó có hoạt động hay Python gây ra lỗi phụ thuộc tròn? Output: 4Có nó hoạt động! Giải pháp 2: Đặt hàng lại vị trí của báo cáo nhập khẩuTrong ví dụ trên, bạn có thể tránh được sự phụ thuộc tròn bằng cách cải tổ trình tự các câu lệnh 3.Do đó, thay vì nhập mô -đun 5 ở đầu trong mô -đun 4, bạn có thể nhập nó sau, như được hiển thị trong đoạn trích sau:instead of importing the 5 module at the beginning within the 4 module, you can import it
later, as shown in the following snippet:
5Output: 4Sự kết luậnĐể tổng hợp mọi thứ, bạn có thể giải quyết lỗi của ____ ____51 bằng cách giải quyết các phụ thuộc tròn. Bạn có thể làm điều đó bằng cách loại bỏ việc sử dụng hình thức nhập nội dung 2 từ một mô -đun và chỉ cần sử dụng câu lệnh 3 để nhập toàn bộ mô -đun.Một cách giải quyết khác cho lỗi này là thay đổi vị trí của các báo cáo nhập tương ứng trong mã của bạn. Tôi hy vọng hướng dẫn này đã trả lời các truy vấn của bạn. Vui lòng theo dõi và đăng ký để biết thêm các giải pháp và các cuộc thảo luận thú vị trong tương lai. Mã hóa hạnh phúc!stay tuned and subscribe for more solutions and interesting discussions in the future. Happy coding! Lập trình viên hài hước❓ 4 5Khóa học được đề xuất:
Tôi là một blogger Python chuyên nghiệp và người tạo nội dung. Tôi đã xuất bản nhiều bài báo và tạo ra các khóa học trong một khoảng thời gian. Hiện tại tôi đang làm việc như một freelancer toàn thời gian và tôi có kinh nghiệm trong các lĩnh vực như Python, AWS, DevOps và Mạng. Bạn có thể liên lạc với tôi @: Upwork LinkedIn Làm thế nào để sửa lỗi nhập khẩu không thể nhập tên?Nếu lỗi xảy ra do sự phụ thuộc tròn, nó có thể được giải quyết bằng cách chuyển các lớp đã nhập sang tệp thứ ba và nhập chúng từ tệp này.Nếu lỗi xảy ra do tên sai, tên của lớp trong tệp Python phải được xác minh và sửa chữa.moving the imported classes to a third file and importing them from this file. If the error occurs due to a misspelled name, the name of the class in the Python file should be verified and corrected.
Gói thử nghiệm trong Python là gì?Mỗi mô -đun trong gói thử nghiệm có tên bắt đầu bằng Test_ là bộ thử nghiệm cho một mô -đun hoặc tính năng cụ thể.Tất cả các bài kiểm tra mới nên được viết bằng mô -đun Unittest hoặc DocTest.Một số thử nghiệm cũ được viết bằng cách sử dụng kiểu thử nghiệm truyền thống của người Viking so sánh đầu ra được in với SYS.a testing suite for a specific module or feature. All new tests should be written using the unittest or doctest module. Some older tests are written using a “traditional” testing style that compares output printed to sys. |