python经验总结
查找安装地址
控制台
where python
调试/测试
程序计时
time.perf_counter()
以秒为单位返回时间的浮点值
time.perf_counter_ns()
返回时间以纳秒为单位
控制台打印屏蔽与显示
import sys, os
# Disable
def blockPrint():
sys.stdout = open(os.devnull, 'w')
# Restore
def enablePrint():
sys.stdout = sys.__stdout__
报错处理
Python版本问题
ModuleNotFoundError: No module named 'cPickle'
python2有cPickle,但是python3没有cPickle
python2使用:
import cPickle
python3使用:
import pickle
name 'reload' is not defined
- 在Python2.x中由于str和byte之间没有明显区别,经常要依赖于defaultencoding来做转换。
- 在python3中有了明确的str和byte类型区别,从一种类型转换成另一种类型要显式指定encoding。
python2使用:
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8’)
python3使用:
import importlib,sys
importlib.reload(sys)
AttributeError: module 'sys' has no attribute 'setdefaultencoding'
报错原因同上,python3没有sys.setdefaultencoding('utf-8')
,删除该行即可
多线程相关
greenlet.error: cannot switch to a different thread
debug模式下会对线程的切换造成混乱,解决方案:
第一种: 禁用debug模式即可
第二种:在主函数中加入monkey patch
if __name__ == '__main__':
from gevent import monkey
monkey.patch_all()
PyQt5相关
ERROR: Could not find a version that satisfies the requirement PIL (from versions: none)
ERROR: No matching distribution found for PIL
PIL,全称 Python Imaging Library,是 Python 平台一个功能非常强大而且简单易用的图像处理库。但是,由于 PIL 仅支持到Python 2.7,加上年久失修,于是一群志愿者在 PIL 的基础上创建了兼容 Python 3 的版本,名字叫 Pillow ,现在可以通过安装 Pillow 来使用 PIL。
pip install pillow
ImportError: cannot import name 'options' from 'pyecharts'
解决:
pip install pyecharts -U
Numpy相关
ValueError: numpy.ndarray size changed, may indicate binary incompatibility.
核心原因是 numpy 版本与当前一些库不匹配,把 numpy 更新到最新版本即可
pip install --upgrade numpy
urllib相关
AttributeError: module 'urllib' has no attribute 'request'
解决:
from urllib import request
Unresolved reference 'urllib2'
解决:
在python3.3以后,用urllib.request代替urllib2
import语句使用
from urllib import request
pandas相关
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
在向DataFrame中插入新行时,Pandas报出了这个警告。虽然不影响程序执行,但还是不想看到警告(X
事故现场:
add = {'ts_code': stock_code, 'trade_date': now_date, 'close': now_price}
df.loc[len(df)] = add
解决方法:
直接对副本修改就会出现这个警告,需要在修改前应该先对副本复制一下
add = {'ts_code': stock_code, 'trade_date': now_date, 'close': now_price}
df = df.copy()
df.loc[len(df)] = add