我无法在当前目录中导入经过验证的代码?

时间:2018-06-06 14:27:46

标签: python

所以我有以下脚本test.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 个答案:

答案 0 :(得分:0)

已经有一个测试模块(https://docs.python.org/3/library/test.htmlhttps://docs.python.org/2/library/test.html),它在PYTHONPATH上的本地test.py之前加载,因为你使用了import。

在解释器中,您可以看到它的位置

def round_accordingly(num):

    if num>=500:
        return str(round(num))
    elif num>=100:
        return str(round(num, 1))
    elif num>=5:
        return str(round(num, 2))


print(round_accordingly(550.73424))
print(round_accordingly(200.234245))
print(round_accordingly(7.564743))

您的可能不是测试模块。它倾向于成功导入。你的PYTHONPATH必须有另一个test.py.

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

避免名称冲突的简单方法,为文件命名&#34; test_foo.py&#34;并导入test_foo。 (除非你在多个地方使用test_foo.py)

此外,考虑运行功能,结合

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

因为现在它将作为导入的一部分执行这些打印。你也希望在...其他任何&#34; test.py&#34;你有。

答案 1 :(得分:0)

这两种情况都是:

1)Python内置模块&#34; test&#34; (https://docs.python.org/2.7/library/test.html)正在加载,而不是你的本地test.py,但是,你应该没有任何问题导入本地test.py,因为它是一个默认模块,奇怪的是你在收到错误时你尝试导入它(除非你修改它)。您可以尝试此操作以查看导入的模块缓存并检查测试模块路径 import sys print sys.modules
如果是这种情况,那么您只需打开一个新的python解释器以确保没有缓存测试模块。如果仍然缓存,则将test.py的名称更改为something_test.py

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