2009-10-10 31 views
23

Làm thế nào tôi có thể (pythonically) kiểm tra nếu một tham số là một mô-đun Python? Không có loại như mô-đun hoặc gói.Kiểm tra xem tham số có phải là một mô-đun Python không?

>>> os 
<module 'os' from '/usr/lib/python2.6/os.pyc'> 

>>> isinstance(os, module) 
Traceback (most recent call last): 
    File "/usr/lib/gedit-2/plugins/pythonconsole/console.py", line 290, in __run 
    r = eval(command, self.namespace, self.namespace) 
    File "<string>", line 1, in <module> 
NameError: name 'module' is not defined 

tôi có thể làm điều này:

>>> type(os) 
<type 'module'>  

Nhưng những gì tôi so sánh nó với? . :(

Tôi đã thực hiện một module đơn giản để nhanh chóng tìm thấy phương pháp trong mô-đun và có được văn bản trợ giúp cho họ tôi cung cấp một var mô-đun và một chuỗi để phương pháp của tôi:

def gethelp(module, sstring): 

    # here i need to check if module is a module. 

    for func in listseek(dir(module), sstring): 
     help(module.__dict__[func]) 

Tất nhiên, điều này sẽ làm việc ngay cả khi mô-đun = 'abc': sau đó dir ('abc') sẽ cung cấp cho tôi danh sách các phương pháp để đối tượng chuỗi, nhưng tôi không cần điều đó

+0

Bạn biết phương thức help() và pydoc và những nỗ lực tương tự, phải không? –

+0

pydoc hơi khác một chút. Tôi cần một cách đơn giản để tìm một phương pháp mà không biết đó là tên chính xác. Ví dụ, cái gì đó có 'kích thước' trong os.path. –

+0

Bạn có thể Duck Loại mô-đun không? Mày cần nó để làm gì? Chỉ cần thử điều đó và bắt ngoại lệ nếu nó không thành công. – u0b34a0f6ae

Trả lời

50
from types import ModuleType 

isinstance(obj, ModuleType) 
+0

Vui lòng sử dụng thụt lề để đánh dấu nó là mã. 1 mặc dù, không biết điều này. –

+3

Hah! Ai đã cho -1 về điều này?!? Người ta thật là vui tính. –

+0

Bạn vừa lặp lại những gì tôi đã nói trước đó, và câu trả lời của tôi hoàn chỉnh hơn cho thấy tại sao mã này là pythonic. Thực ra tôi không nên bỏ phiếu chống lại câu trả lời của bạn, xin lỗi. –

4

này có vẻ hơi hacky, nhưng:.

>>> import sys 
>>> import os 
>>> type(os) is type(sys) 
True 
+0

Có, nó không hoàn toàn sạch sẽ. –

+7

Hehe, trong thư viện chuẩn, mô đun 'loại', tìm thấy điều này:' ModuleType = type (sys) ':) – kolypto

25
>>> import inspect, os 
>>> inspect.ismodule(os) 
True 
Các vấn đề liên quan