2013-02-22 8 views
7

Giả sử tôi đang làm việc với thư viện python 'yêu cầu'.Pycharm: Hoàn thành mã không đưa ra đề xuất

req = requests.get("http://google.com") 

Bây giờ sau này, nếu tôi nhập req., tôi phải có danh sách tất cả các phương pháp tôi có thể truy cập. Nhưng vì lý do nào đó tôi không, ngay cả khi tôi nhấn ctrl-không gian bằng tay.

Nếu tôi thử điều này trong ipython, tôi nhận đề xuất tự động hoàn thành. Ngay cả khi tôi thử nó thông qua việc xây dựng trong giao diện điều khiển python trong pycharm, tôi nhận được khuyến nghị.

Tại sao điều này xảy ra?

Trả lời

15

Vì Python là một ngôn ngữ được nhập động, bạn cần đảm bảo rằng nó có thể tìm ra loại thứ gì và kiểm tra trên các thư viện trên hệ thống của bạn một cách chính xác. Hãy thử để chắc chắn rằng nó là rõ ràng loại đối tượng là trong mã của bạn.

Một cách hay được thêm gần đây (2.7) là cho phép phát hiện kiểu thời gian chạy - PyCharm móc vào chương trình của bạn trong khi chạy (trong khi gỡ lỗi) và kiểm tra các loại biến khi chúng được sử dụng.

Bạn có thể bật tùy chọn này bằng cách chuyển đến tùy chọn, sau đó chọn "Trình gỡ lỗi Python" và chọn "Thu thập thông tin loại thời gian chạy để biết thông tin chi tiết về mã".

Preferences screen of PyCharm

Bạn cũng có thể nói 'PyCharm bằng cách sử dụng Epydoc hay phong cách Sphinx docstrings chứa thông tin về tham số và giá trị trả về các loại. PyCharm sẽ sử dụng chúng để cải thiện kiểm tra của nó.

6

Python là ngôn ngữ được nhập động, có nghĩa là hàm "get" không khai báo kiểu trả về của nó. Khi bạn đang nhập mã trong IPython hoặc trong giao diện điều khiển PyCharm, mã thực sự đang được thực thi và có thể kiểm tra cá thể đối tượng trong trình thông dịch đang chạy và để lấy danh sách các phương thức của nó. Khi bạn nhập mã vào PyCharm hoặc trong bất kỳ Python Python nào khác, nó không được thực hiện và chỉ có thể sử dụng phân tích tĩnh để suy ra kiểu trả về của phương thức. Điều này là không thể trong mọi trường hợp.