最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【提醒】Python新手开发人员注意事项:测试文件名不要和导入的库同名

Python crifan 5389浏览 0评论

看到:

菜鸟求教tushare pro,看不懂的问题-CSDN论坛

以为是其他什么问题呢

帮其搜索:

tushare

Tushare -财经数据接口包

module tushare has no attribute set_token

新人发帖求助!python使用tushare股票分析包方法报错-CSDN论坛

“估计你的文件名叫tushare.py, 改个名就好了.”

->那估计是这个问题了:小白测试python时,把测试文件,写成了:tushare.py

和要测试的库tushare,重名了。

导致Python解析器去解析代码

import tushare as ts

变成自己的测试文件tushare.py

而不是要测试的库:tushare了。

也看到了别的类似的例子

pycharm 导入tushare错误,请帮帮忙,百度半天也没搞定-CSDN论坛

import tushare as ts
<p>print(ts.__version__)</p><p>提示错误##########</p><p>D:\Programs\Anaconda3\python.exe D:/PythonWorks/PycharmProjects/Stocks/tushare.py</p><p>Traceback (most recent call last):</p><p> File "D:/PythonWorks/PycharmProjects/Stocks/tushare.py", line 1, in &lt;module&gt;</p><p>import tushare as ts </p><p>File "D:\PythonWorks\PycharmProjects\Stocks\tushare.py", line 2, in &lt;module&gt;</p><p> print(ts.__version__)</p><p>AttributeError: module 'tushare' has no attribute '__version__'</p><p>Process finished with exit code 1</p>

很明显就是同样的问题。

关于tushare python的问题。-CSDN论坛

“我下好了tushare 导入正确,但是在调用函数的时候,为什么总是报没有这个函数呢,

print(help(ts.get_k_data()))

AttributeError: module ‘tushare’ has no attribute ‘get_k_data’

或许你将tushare进行了改变,赋值替换了它或自己新建了一个叫tushare的文件”

AttributeError: module ‘tushare’ has no attribute ‘__version__’ · Issue #241 · waditu/tushare · GitHub

不要以tushare作为文件名

在策略模块定义函数引用tushare pro – VincentZHOU – JoinQuant

“也有可能你的研究中有一个叫 tushare.py 的文件,导致没有调到真正的 tushare 包,如果有的话可以试着改个名字”

此处,去写代码测试效果:

此处是Mac中

去用pip安装库

【已解决】mac中pip安装Python库tushare

然后去VSCode中写代码测试:

起个正常的,典型的,用于测试的文件名:

比如:

testTushare.py

import tushare as ts
print("ts.__version__=%s" % ts.__version__)
ts.set_token('your token here')

可以正常输出:

ts.__version__=1.2.48

而如果改为:

用于测试的文件名,和要测试的库 tushrare 同名,变成:

tushare.py

import tushare as ts
print("ts.__version__=%s" % ts.__version__)
ts.set_token('your token here')

就会出现:

加断点调试时,就能发现,导入的ts,其实是空的,啥函数和属性都没有:

后面的代码:

print("ts.__version__=%s" % ts.__version__)

就会报错了:

发生异常: AttributeError

partially initialized module ‘tushare’ has no attribute ‘__version__’ (most likely due to a circular import)

File “/Users/limao/dev/crifan/python/testTushare/tushare.py”, line 2, in <module> File “/Users/limao/dev/crifan/python/testTushare/tushare.py”, line 1, in <module> import tushare as ts

如果注释掉上面一行,用下面的

ts.set_token('your token here')

测试,也是同样问题:

与之对比:

名字不要是库名,即可正常导入和调试:

所以,结论就是:

【总结】

写python代码用于测试时,创建测试用的python文件
  • 应该:起个,见名知意的,更加易懂的,不容易混淆的文件名
    • 常见思路和做法:测试用的,演示用的文件名中 ,往往包含test,demo,example等字眼
    • 此处:
      • 举例:比较合适的写法
        • testTushare.py
        • demoTushare.py
        • tushareDemo.py
        • tushareTest.py
        • tushareExample.py
  • 不应该:和测试的库同名
    • 此处:
      • 用于写测试tushare的Python库的测试文件,不要写成:tushare.py
    • 坏处:会和原有的库冲突
      • 导致:import导入时,错误导入了自己的测试文件,而不是原有的库
  • -》引申 + 举一反三 + 相关:
    • 也不应该:起个其他简单的,偷懒的名字
      • 典型的有:
        • 1.py
        • 123.py
        • test.py
        • demo.py
        • a.py
        • 等等
      • 都是属于:
        • 坏习惯
        • 偷懒的写法
        • 容易和其他文件冲突的写法
        • 也不容易看懂=没法从你文件名看出你要做什么

转载请注明:在路上 » 【提醒】Python新手开发人员注意事项:测试文件名不要和导入的库同名

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.191 seconds, using 22.12MB memory