递归模块调用逻辑缺陷

时间:2012-11-25 02:50:18

标签: python python-2.7 logic

我正在尝试编写一个在用户程序中找到异常的程序

我有一个名为test.py的文件:

try:
    # some code to get the name of the calling program
    #Then the code is like "import filename.py" , for example the next line
    import sample.py  # this is what should happen when the file name is got

    execfile("test.py")   # to run this file

catch:
      # catching some exceptions here

现在如果我假设用户有一个文件说sample.py看起来像

import test.py

def __main__():
     4/0  # sample exception

我是python编程的新手,但我知道python将所有程序视为模块,所以基本上我设想程序流是

1)当用户运行sample.py时,控制流转到test.py,然后获取调用程序的名称并将其导入try块。

2)然后流程返回到sample.py,理想情况下我希望遇到并捕获异常

3)但是当控件返回到sample.py时,它会返回test.py导致递归循环

我的问题是双重的

1)有没有办法获取导入模块的程序的名称。还有一种方法可以获取同一工作区(同一文件夹)中程序的名称

2)我有这个控制流程的原因是我希望用户不要打开我的程序(test.py),但无论我怎么看,如果我的模块刚刚导入他的程序,它将像一个递归循环,任何修改我的设计以使其工作的建议,也许是第三个将它组合在一起的脚本?

我正在使用python 2.7

奇怪的设计模式是因为我不希望用户编写任何代码来运行我的程序,他应该写的最大值就是导入我的程序

1 个答案:

答案 0 :(得分:0)

好的,有两条路线:

首先,__name__包含您从中导入的模块的名称。

其次,我的个人建议是分发一个test.pyc或者其他东西并要求该人运行该.pyc,以便他们不知道test.py的内容