【问题标题】:Recursive module calling logic flaw递归模块调用逻辑缺陷
【发布时间】:2012-11-25 02:50:17
【问题描述】:

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

我有一个名为 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

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

【问题讨论】:

  • 我不太明白:用户在哪里写代码?如果他们只需要运行样本,那么样本为什么需要了解测试?
  • 用户在 sample.py 中编写代码,用户使用 test.py 查找异常
  • 那为什么sample.py需要导入test.py呢?用户运行 test.py 不是更容易和更合适吗?
  • 谢谢你的回答,原因是我不想让用户知道 test.py 的内容。在用户的眼中,它应该只是在他的文件中的一个简单的导入。

标签: python python-2.7 logic


【解决方案1】:

好的,那么两条路线:

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

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

【讨论】:

    猜你喜欢
    • 2017-07-16
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2012-08-02
    • 1970-01-01
    • 2015-10-19
    • 2017-07-13
    相关资源
    最近更新 更多