所以我有以下脚本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
你看到了什么问题吗?
答案 0 :(得分:0)
已经有一个测试模块(https://docs.python.org/3/library/test.html或https://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指定为字符串并尝试添加整数,因此导入不起作用。我怀疑这是真的,因为我确定如果你知道这种情况:-)