Cài đặt PowerShell mới nhất để có các tính năng và cải tiến mới. Di chuyển từ Windows PowerShell 5. 1 đến PowerShell 7 - PowerShell. Tìm hiểu Microsoft
PS C. \GitHub3\CANhandler\CANhandler> & C. /Users/LeighBoyd/AppData/Local/Programs/Python/Python310/python. exe c. /GitHub3/CANhandler/CANhandler/chính. py
Truy nguyên [lần gọi gần đây nhất].
Tệp “c. \GitHub3\CANhandler\CANhandler\main. py”, dòng 4, trong
nhập có thể
ModuleNotFoundError. Không có mô-đun nào có tên là 'có thể'
câu hỏi
- Tôi có nên chạy cái này từ vùng chứa Phát triển không? . tập tin exe được đặt trên C. /người dùng/… tôi. e. trong Windows. điều này không thể đúng
- Tôi có nên thực hiện “chạy mà không cần gỡ lỗi” để thực hiện điều này thay vì “Chạy tệp Python” phía trên bên phải không
- có một ví dụ C tương đương?
Cảm ơn
Xin chào @leighjboyd,
khi tôi nhấp vào "chạy tệp python"
Đợi đã, bạn nói rằng bạn đang chạy
>>> __name__ '__main__'05. Như trong lệnh Visual Studio Code này?
hình ảnh892×86 3. 75 KB
Nếu vậy thì về cơ bản, bạn chỉ yêu cầu Visual Studio Code thực thi tệp Python này trên máy của bạn. Mà có lẽ giải thích hầu hết các lỗi của bạn. Xin lưu ý rằng
>>> __name__ '__main__'06 ở phía trước lệnh có nghĩa là lệnh này đến từ tiện ích mở rộng Python chứ không phải tiện ích mở rộng Torizon của chúng tôi
Như đã nêu trong ví dụ mà bạn đang tham khảo [Cách sử dụng CAN trên TorizonCore. Trung tâm nhà phát triển Toradex]
Để tải bộ chứa ứng dụng này vào mục tiêu của bạn, mà Tiện ích mở rộng Torizon đã yêu cầu thông tin xác thực của nó trước đó [ví dụ: tên máy chủ/IP, người dùng và mật khẩu], bạn chỉ cần nhấn F5 trên bàn phím của mình
Cố gắng chỉ thực thi các Lệnh Visual Studio được tạo cho tiện ích mở rộng của chúng tôi. Các lệnh như vậy sẽ được chờ đợi trước với một
>>> __name__ '__main__'07 hoặc một cái gì đó tương tự
có một ví dụ C tương đương?
Chúng tôi chỉ cung cấp ví dụ Python đơn giản này làm tài liệu tham khảo. Sau đó, tùy thuộc vào người dùng để tìm chức năng tương đương trong bất kỳ ngôn ngữ lập trình nào họ muốn sử dụng. Đối với C, tôi tưởng tượng có rất nhiều ví dụ ngoài kia
tên của môi trường cấp cao nhất của chương trình, có thể được kiểm tra bằng cách sử dụng biểu thức
>>> __name__ '__main__'1;
tệp
>>> __name__ '__main__'2 trong các gói Python
Cả hai cơ chế này đều liên quan đến các mô-đun Python; . Chúng được giải thích chi tiết dưới đây. Nếu bạn chưa quen với các mô-đun Python, hãy xem phần hướng dẫn Mô-đun để biết phần giới thiệu.
>>> __name__
'__main__'
1¶
Khi một mô-đun hoặc gói Python được nhập,
>>> __name__ '__main__'4 được đặt thành tên của mô-đun. Thông thường, đây là tên của chính tệp Python không có phần mở rộng
>>> __name__ '__main__'5
>>> import configparser >>> configparser.__name__ 'configparser'
Nếu tệp là một phần của gói, thì
>>> __name__ '__main__'4 cũng sẽ bao gồm đường dẫn của gói gốc
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'
Tuy nhiên, nếu mô-đun được thực thi trong môi trường mã cấp cao nhất, thì
>>> __name__ '__main__'4 của nó được đặt thành chuỗi
>>> __name__ '__main__'8
“Môi trường mã cấp cao nhất” là gì?¶
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'9 là tên của môi trường nơi mã cấp cao nhất được chạy. “Mã cấp cao nhất” là mô-đun Python do người dùng chỉ định đầu tiên bắt đầu chạy. Đó là "cấp cao nhất" vì nó nhập tất cả các mô-đun khác mà chương trình cần. Đôi khi “mã cấp cao nhất” được gọi là điểm vào ứng dụng
Môi trường mã cấp cao nhất có thể là
phạm vi của lời nhắc tương tác
>>> __name__ '__main__'
mô-đun Python được chuyển tới trình thông dịch Python dưới dạng đối số tệp
>>> __name__ '__main__'
2mô-đun hoặc gói Python được chuyển tới trình thông dịch Python với đối số
>>> __name__ '__main__'
20>>> __name__ '__main__'
4Mã Python được trình thông dịch Python đọc từ đầu vào tiêu chuẩn
>>> __name__ '__main__'
5Mã Python được chuyển tới trình thông dịch Python với đối số
>>> __name__ '__main__'
21>>> __name__ '__main__'
7
Trong mỗi tình huống này,
>>> __name__ '__main__'4 của mô-đun cấp cao nhất được đặt thành
>>> __name__ '__main__'8
Kết quả là, một mô-đun có thể khám phá xem nó có đang chạy trong môi trường cấp cao nhất hay không bằng cách kiểm tra
>>> __name__ '__main__'4 của chính nó, điều này cho phép một thành ngữ chung cho mã thực thi có điều kiện khi mô-đun không được khởi tạo từ câu lệnh nhập
>>> __name__ '__main__'1
Xem thêm
Để có cái nhìn chi tiết hơn về cách đặt
>>> __name__ '__main__'4 trong mọi trường hợp, hãy xem phần hướng dẫn Mô-đun .
Cách sử dụng thành ngữ¶
Một số mô-đun chứa mã chỉ dành cho mục đích sử dụng tập lệnh, chẳng hạn như phân tích đối số dòng lệnh hoặc tìm nạp dữ liệu từ đầu vào tiêu chuẩn. Nếu một mô-đun như thế này được nhập từ một mô-đun khác, chẳng hạn như để kiểm tra đơn vị nó, mã tập lệnh cũng sẽ vô tình thực thi
Đây là nơi sử dụng khối mã
>>> __name__ '__main__'26 có ích. Mã trong khối này sẽ không chạy trừ khi mô-đun được thực thi trong môi trường cấp cao nhất
Đặt càng ít câu lệnh càng tốt vào khối bên dưới
>>> __name__ '__main__'27 có thể cải thiện độ rõ ràng và chính xác của mã. Thông thường, một hàm có tên
>>> __name__ '__main__'28 gói gọn hành vi chính của chương trình
>>> __name__ '__main__'6
Lưu ý rằng nếu mô-đun không đóng gói mã bên trong hàm
>>> __name__ '__main__'28 mà thay vào đó đặt nó trực tiếp trong khối
>>> __name__ '__main__'26, thì biến
>>> __name__ '__main__'41 sẽ là toàn cục cho toàn bộ mô-đun. Điều này dễ xảy ra lỗi vì các chức năng khác trong mô-đun có thể vô tình sử dụng biến toàn cục thay vì tên cục bộ. Hàm
>>> __name__ '__main__'28 giải quyết vấn đề này
Sử dụng hàm
>>> __name__ '__main__'28 có thêm lợi ích là bản thân hàm
>>> __name__ '__main__'44 được tách biệt và có thể nhập ở nơi khác. Khi
>>> __name__ '__main__'45 được nhập, các hàm
>>> __name__ '__main__'44 và
>>> __name__ '__main__'28 sẽ được xác định, nhưng cả hai hàm này sẽ không được gọi, bởi vì
>>> __name__ '__main__'48
Cân nhắc về bao bì¶
Các hàm
>>> __name__ '__main__'28 thường được sử dụng để tạo các công cụ dòng lệnh bằng cách chỉ định chúng làm điểm nhập cho tập lệnh bảng điều khiển. Khi điều này được thực hiện, pip sẽ chèn lời gọi hàm vào tập lệnh mẫu, trong đó giá trị trả về của
>>> __name__ '__main__'28 được chuyển vào
>>> __name__ '__main__'51. Ví dụ
>>> __name__ '__main__'0
Vì cuộc gọi đến
>>> __name__ '__main__'28 được bao bọc trong
>>> __name__ '__main__'51, nên kỳ vọng là chức năng của bạn sẽ trả về một số giá trị được chấp nhận làm đầu vào cho
>>> __name__ '__main__'51;
Bằng cách chủ động tuân theo quy ước này, mô-đun của chúng ta sẽ có hành vi tương tự khi chạy trực tiếp [i. e.
>>> __name__ '__main__'56] như nó sẽ có nếu sau này chúng tôi đóng gói nó dưới dạng điểm nhập tập lệnh bảng điều khiển trong gói có thể cài đặt pip
Đặc biệt, hãy cẩn thận về việc trả về các chuỗi từ hàm
>>> __name__ '__main__'28 của bạn.
>>> __name__ '__main__'51 sẽ diễn giải một đối số chuỗi dưới dạng thông báo lỗi, vì vậy chương trình của bạn sẽ có mã thoát là
>>> __name__ '__main__'59, biểu thị lỗi và chuỗi sẽ được ghi vào
>>> __name__ '__main__'70. Ví dụ
>>> __name__ '__main__'45 từ trước minh họa bằng cách sử dụng quy ước
>>> __name__ '__main__'72
Xem thêm
Hướng dẫn sử dụng gói Python chứa một tập hợp các hướng dẫn và tài liệu tham khảo về cách phân phối và cài đặt các gói Python bằng các công cụ hiện đại
>>> __name__
'__main__'
2 trong Gói Python¶
Nếu bạn không quen với các gói Python, hãy xem phần Gói của hướng dẫn. Thông thường nhất, tệp
>>> __name__ '__main__'2 được sử dụng để cung cấp giao diện dòng lệnh cho gói. Hãy xem xét gói giả thuyết sau đây, “bandclass”.
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'0
>>> __name__ '__main__'2 sẽ được thực thi khi chính gói đó được gọi trực tiếp từ dòng lệnh bằng cờ
>>> __name__ '__main__'20. Ví dụ
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'1
Lệnh này sẽ khiến
>>> __name__ '__main__'2 chạy. Cách bạn sử dụng cơ chế này sẽ phụ thuộc vào bản chất của gói bạn đang viết, nhưng trong trường hợp giả định này, có thể hợp lý nếu cho phép giáo viên tìm kiếm học sinh
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'2
Lưu ý rằng
>>> __name__ '__main__'78 là một ví dụ về nhập tương đối. Kiểu nhập này có thể được sử dụng khi tham chiếu các mô-đun trong một gói. Để biết thêm chi tiết, hãy xem Tham chiếu bên trong gói trong phần Mô-đun của .
Cách sử dụng thành ngữ¶
Nội dung của
>>> __name__ '__main__'2 thường không được rào bằng các khối
>>> __name__ '__main__'26. Thay vào đó, các tệp đó được giữ ngắn gọn, các chức năng để thực thi từ các mô-đun khác. Những mô-đun khác sau đó có thể dễ dàng kiểm tra đơn vị và có thể tái sử dụng đúng cách
Nếu được sử dụng, khối
>>> __name__ '__main__'26 sẽ vẫn hoạt động như mong đợi đối với tệp
>>> __name__ '__main__'2 trong một gói vì thuộc tính
>>> __name__ '__main__'4 của nó sẽ bao gồm đường dẫn của gói nếu được nhập
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'3
Điều này sẽ không hoạt động đối với các tệp
>>> __name__ '__main__'2 trong thư mục gốc của một. tập tin zip mặc dù. Do đó, để đảm bảo tính nhất quán, nên ưu tiên sử dụng
>>> __name__ '__main__'2 tối thiểu như
>>> __name__ '__main__'16 được đề cập bên dưới
Xem thêm
Xem
>>> __name__ '__main__'16 để biết ví dụ về gói có tối thiểu
>>> __name__ '__main__'2 trong thư viện chuẩn. Nó không chứa khối
>>> __name__ '__main__'26. Bạn có thể gọi nó bằng
>>> __name__ '__main__'60
Xem
>>> __name__ '__main__'61 để biết thêm chi tiết về cờ
>>> __name__ '__main__'20 cho trình thông dịch thực thi
Xem
>>> __name__ '__main__'63 để biết cách chạy các ứng dụng được đóng gói dưới dạng. tập tin nén. Trong trường hợp này, Python tìm tệp
>>> __name__ '__main__'2 trong thư mục gốc của kho lưu trữ
>>> __name__
'__main__'
65¶
Bất kể chương trình Python được bắt đầu với mô-đun nào, các mô-đun khác đang chạy trong cùng chương trình đó có thể nhập phạm vi của môi trường cấp cao nhất [ không gian tên] by importing the
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'9 module. This doesn’t import a
>>> __name__ '__main__'2 file but rather whichever module that received the special name
>>> __name__ '__main__'8.
Đây là một mô-đun ví dụ sử dụng không gian tên
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'9
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'4
Ví dụ sử dụng mô-đun này có thể như sau
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'5
Bây giờ, nếu chúng ta bắt đầu chương trình của mình, kết quả sẽ như thế này
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'6
Mã thoát của chương trình sẽ là 1, cho biết có lỗi. Bỏ ghi chú dòng với
>>> __name__ '__main__'00 sẽ sửa chương trình và bây giờ chương trình thoát với mã trạng thái 0, biểu thị thành công
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'7
Lưu ý rằng việc nhập
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'9 không gây ra bất kỳ sự cố nào với mã cấp cao nhất chạy ngoài ý muốn dành cho việc sử dụng tập lệnh được đặt trong khối
>>> __name__ '__main__'02 của mô-đun
>>> __name__ '__main__'03. Tại sao điều này làm việc?
Python chèn một mô-đun
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'9 trống vào
>>> __name__ '__main__'05 khi khởi động trình thông dịch và điền vào mô-đun đó bằng cách chạy mã cấp cao nhất. Trong ví dụ của chúng tôi, đây là mô-đun
>>> __name__ '__main__'03 chạy từng dòng và nhập
>>> __name__ '__main__'07. Đổi lại,
>>> __name__ '__main__'07 nhập khẩu
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'9 [thực ra là
>>> __name__ '__main__'03]. Đó là một chu kỳ nhập khẩu. May mắn thay, vì mô-đun
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'9 được điền một phần có trong
>>> __name__ '__main__'05, nên Python chuyển nó sang
>>> __name__ '__main__'07. Xem Những cân nhắc đặc biệt đối với __main__ trong tài liệu tham khảo của hệ thống nhập để biết chi tiết về cách thức hoạt động của tính năng này.
REPL của Python là một ví dụ khác về “môi trường cấp cao nhất”, vì vậy mọi thứ được định nghĩa trong REPL đều trở thành một phần của phạm vi
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'9
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'8
Lưu ý rằng trong trường hợp này, phạm vi
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'9 không chứa thuộc tính
>>> from concurrent.futures import process >>> process.__name__ 'concurrent.futures.process'06 vì nó tương tác