代码之家  ›  专栏  ›  技术社区  ›  my_question

我不能在当前目录中导入已验证的代码吗?

  •  0
  • my_question  · 技术社区  · 8 年前

    所以我有下面的剧本,测试.py:

    >cat test.py
    def foo(x):
        y=x*2
        return y
    
    print foo(100)
    x = "aaa100"
    print x
    

    我可以很好地运行它:

    >python test.py
    200
    aaa100
    

    但在交互式解释器中,我无法导入它:

    >python
    Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import test                                                       
    Traceback (most recent call last):                                    
      File "<stdin>", line 1, in <module>                                 
      File "test.py", line 6, in <module>                                 
        x + 10                                                            
    TypeError: cannot concatenate 'str' and 'int' objects 
    

    你知道怎么了吗?

    2 回复  |  直到 8 年前
        1
  •  0
  •   Kenny Ostrom    8 年前

    已经有一个测试模块( https://docs.python.org/3/library/test.html 或 https://docs.python.org/2/library/test.html ),在本地测试.py因为你用了import。

    在解释器里,你可以看到它在哪里

    > import test
    > test
    <module 'test' from 'C:\Python27\lib\test\__init__.pyc'>
    

    你的可能不是测试模块。它倾向于成功导入。你一定还有一个测试.py在你的蟒蛇身上。

    您的命令行没有导入,因此当您将本地文件名作为参数直接传递给python可执行文件时,可以随意使用它。

    一种避免名称冲突的简单方法,将文件命名为“test”_foo.py公司“并导入test\u foo。(除非您使用测试_foo.py公司在多个地方)

    另外,考虑一个run函数,与

    if __name__ == __main__:
    

    因为现在它将执行这些打印作为导入的一部分。你也会想在。。。“不管其他什么”测试.py“你有。

        2
  •  0
  •   dr_dino    8 年前

    要么是这两种情况:

    1) Python内置模块“test”( https://docs.python.org/2.7/library/test.html )正在加载而不是本地测试.py但是,导入本地测试.py由于它是一个默认的模块,奇怪的是当您尝试导入它时会出现错误(除非您已经修改了它)。您可以尝试查看导入的模块缓存并检查测试模块路径 import sys print sys.modules
    如果是这种情况,那么您只需打开一个新的python解释器,以确保没有缓存任何测试模块。如果它仍在缓存中,则更改测试.py对某事_测试.py

    2) 上面表示的代码不完整,并且有一行“x+10”,由于您将x指定为字符串并尝试添加整数,因此导入不起作用。我怀疑这是真的,因为我确信如果是这样的话,你会知道的:-)