Python论坛  - 讨论区

标题:[python-chinese] 请教一个传递module的问题

2004年01月07日 星期三 16:21

apple liguoping at richisland.com
Wed Jan 7 16:21:47 HKT 2004

#-----socket.py--------文件1
from _socket import *
import os, sys
__all__ = ["getfqdn"]
import _socket
__all__.extend(os._get_exports_list(_socket))
……
#-------os.py-----------文件2
def _get_exports_list(module):
    try:
        return list(module.__all__)
    except AttributeError:
        return [n for n in dir(module) if n[0] != '_']
……

目前的错误信息如下:
Traceback (most recent call last):
  File "D:\Python22\lib\os.py", line 36, in _get_exports_list
    return list(module.__all__)
AttributeError: 'module' object has no attribute '__all__'

有以下疑问:
1、import _socket后,有没有办法检查_socket是否加载成功?
2、怎么检查module有没有从文件1传到文件2中?
3、_socket是pyd文件,怎么知道它有那些属性?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20040107/fbf80cad/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年01月07日 星期三 19:54

Jacob Fan jacob at exoweb.net
Wed Jan 7 19:54:29 HKT 2004

1. import _socket后,有没有办法检查_socket是否加载成功?
   _socket应该已经加载成功,否则会在加载这个模块的地方出现一个exception.
2. 怎么检查module有没有从文件1传到文件2中?
   肯定已经传过去了.
3. _socket是pyd文件,怎么知道它有那些属性?
   可以用dir(_socket)来看它有哪些属性.但是Python对象的属性不一定是在__dict__中的,
用定制__getattr__方法定义的属性用这种方法看不到.
 
从你给出的socket.py和os.py的内容看,应该没有问题._get_exports_list在_socket中没有找到__all__属性,应该产生一个AttributeError,然后会被下面的except语句捕捉住.奇怪的是你的例子中没有捕捉住.你能把你的这两个文件给我看看么?

	-----Original Message-----
	From: apple [mailto:liguoping at richisland.com] 
	Sent: Wednesday, January 07, 2004 4:22 PM
	To: python-chinese at lists.python.cn
	Subject: [python-chinese] 请教一个传递module的问题
	
	
	#-----socket.py--------文件1
	from _socket import *
	import os, sys
	__all__ = ["getfqdn"]
	import _socket
	__all__.extend(os._get_exports_list(_socket))
	……
	#-------os.py-----------文件2
	def _get_exports_list(module):
	    try:
	        return list(module.__all__)
	    except AttributeError:
	        return [n for n in dir(module) if n[0] != '_']
	……
	 
	目前的错误信息如下:
	Traceback (most recent call last):
	  File "D:\Python22\lib\os.py", line 36, in _get_exports_list
	    return list(module.__all__)
	AttributeError: 'module' object has no attribute '__all__'
	
	有以下疑问:
	1、import _socket后,有没有办法检查_socket是否加载成功?
	2、怎么检查module有没有从文件1传到文件2中?
	3、_socket是pyd文件,怎么知道它有那些属性?
	 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20040107/232249cb/attachment.html

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2004年01月08日 星期四 10:11

Jacob Fan jacob at exoweb.net
Thu Jan 8 10:11:31 HKT 2004

他的问题奇怪在_get_exports_list已经有了一个try...except,在找不到__all__后,
应该会用dir来看module有哪些属性(去掉其中前缀为'_'的),而不是让这个AttributeError
冒出来. 这个人的信箱好像坏了(或者写错了),估计联系不上了. :-S
> 	def _get_exports_list(module):
> 	    try:
> 	        return list(module.__all__)
> 	    except AttributeError:
> 	        return [n for n in dir(module) if n[0] != '_']


-----Original Message-----
From: Dr. G Wu [mailto:guofu_wu at yahoo.co.uk] 
Sent: Thursday, January 08, 2004 4:45 AM
To: Jacob Fan
Subject: Re: [python-chinese] 请教一个传递module的问题


在你的DOS或XTERM下运行PYTHON
请看下面示范:

cogw at puma downloads $ python
Python 2.2.3 (#1, Dec 25 2003, 00:22:16)
[GCC 3.2.3 20030422 (Gentoo Linux 1.4 3.2.3-r3, propolice)] on linux2 Type "help", "copyright", "credits" or "license" for more information.
>>> import _socket;
>>> dir(_socket)
['AF_APPLETALK', 'AF_AX25', 'AF_BRIDGE', 'AF_INET', 'AF_INET6', 
'AF_IPX', 'AF_NETROM', 'AF_PACKET', 'AF_ROSE', 'AF_UNIX', 
'AF_UNSPEC', 'AF_X25', 'AI_CANONNAME', 'AI_NUMERICHOST', 
'AI_PASSIVE', 'EAI_ADDRFAMILY', 等等...
__all__不是__socket module的属性


On Wednesday 07 January 2004 11:54 am, Jacob Fan wrote:
> 1. import _socket后,有没有办法检查_socket是否加载成功?
>    _socket应该已经加载成功,否则会在加载这个模块的地方出现一个exception.
> 2. 怎么检查module有没有从文件1传到文件2中?
>    肯定已经传过去了.
> 3. _socket是pyd文件,怎么知道它有那些属性?
>    可以用dir(_socket)来看它有哪些属性.但是Python对象的属性不一定是在__dict__中的,
> 用定制__getattr__方法定义的属性用这种方法看不到.
>
> 从你给出的socket.py和os.py的内容看,应该没有问题._get_exports_list在_socket中没有找到__all
>__属性,应该产生一个AttributeError,然后会被下面的except语句捕捉住.奇怪的是你的例子中没有捕捉住.你能把你的这两个
>文件给我看看么?
>
> 	-----Original Message-----
> 	From: apple [mailto:liguoping at richisland.com]
> 	Sent: Wednesday, January 07, 2004 4:22 PM
> 	To: python-chinese at lists.python.cn
> 	Subject: [python-chinese] 请教一个传递module的问题
>
>
> 	#-----socket.py--------文件1
> 	from _socket import *
> 	import os, sys
> 	__all__ = ["getfqdn"]
> 	import _socket
> 	__all__.extend(os._get_exports_list(_socket))
> 	……
> 	#-------os.py-----------文件2
> 	def _get_exports_list(module):
> 	    try:
> 	        return list(module.__all__)
> 	    except AttributeError:
> 	        return [n for n in dir(module) if n[0] != '_']
> 	……
>
> 	目前的错误信息如下:
> 	Traceback (most recent call last):
> 	  File "D:\Python22\lib\os.py", line 36, in _get_exports_list
> 	    return list(module.__all__)
> 	AttributeError: 'module' object has no attribute '__all__'
>
> 	有以下疑问:
> 	1、import _socket后,有没有办法检查_socket是否加载成功?
> 	2、怎么检查module有没有从文件1传到文件2中?
> 	3、_socket是pyd文件,怎么知道它有那些属性?

-- 
Dr. Ben Guofu Wu
Software Engineer
Icom Innovation
GnuPG Public Key: http://www.geocities.com/wubante/doc/publicKey.txt



[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号