Python问题总结(二)

每篇10个问题.
Python问题总结(一)
Python问题总结(三)

1 gunicorn启动

cal/lib/python2.7/site-packages/gunicorn/app/base.py", line 72, in run
    Arbiter(self).run()
  File "/home/SP-in-WEB/xindq/imageStyleTransform/py2envgpu/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 232, in run
    self.halt(reason=inst.reason, exit_status=inst.exit_status)
  File "/home/SP-in-WEB/xindq/imageStyleTransform/py2envgpu/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 345, in halt
    self.stop()
  File "/home/SP-in-WEB/xindq/imageStyleTransform/py2envgpu/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 393, in stop
    time.sleep(0.1)
  File "/home/SP-in-WEB/xindq/imageStyleTransform/py2envgpu/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 245, in handle_chld
    self.reap_workers()
  File "/home/SP-in-WEB/xindq/imageStyleTransform/py2envgpu/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 525, in reap_workers
    raise HaltServer(reason, self.WORKER_BOOT_ERROR)
gunicorn.errors.HaltServer: <HaltServer 'Worker failed to boot.' 3>
  • 原因
    后台进程,supervisor不能监控
  • 解决
    使用Gunicorn的守护进程模式。gunicorn -D

2 base64网络安全模式

  • 问题
InvalidArgumentError (see above for traceback): Invalid character found in base64.
  • 原因
    base64中含有+和-符号,网络通讯需要web-safe模式下的base64.
  • 解决
img_base64 = image_base64.replace('+', '-').replace(r'/', '_')

3 数据库迁移

  • 问题
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
  • 原因
    flask数据库只有一个版本的表,未生成新表。
  • 解决
    (1) 进入数据库
+-------------------+
| Tables_in_webdata |
+-------------------+
| alembic_version   |
| datas             |
| projects          |
| robots            |
| tests             |
| users             |
+-------------------+

(2) 查看alembic_version

select * from alembic_version
+--------------+
| version_num  |
+--------------+
| 54bb4393d149 |
+--------------+

(3) 清空alembic_version

truncate alembic_version

(4) 迁移&更新

python run.py db migrate
# 提示信息
python run.py db migrate 
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.autogenerate.compare] Detected added column 'projects.department'
  Generating /Users/xindaqi/xinPrj/FlaskPrj/AIWeb/migrations/versions/b1383ba36178_.py ... done
python run.py db upgrade
# 提示信息
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade  -> b1383ba36178, empty message

4 python2中文提示错误

  • 问题
SyntaxError: Non-ASCII character '\xe5' in file testFunction.py on line 5, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
  • 原因
    代码中含有中文信息或中文注释.
  • 解决
    代码首行加入编码utf-8
# -*-coding:utf-8-*-

5 numpy.array输出全部数据

  • 问题
    numpy.array数据较多时,会用省略符号…代替数据,而不输出所有数据;
  • 原因
    numpy.array默认输出数据量有限;
  • 解决
    输出numpy.array数据前,设置输出数据量;
# threshold 表示输出的数据量
np.set_printoptions(threshold=1e6)

6 python3.x ASCII编码错误

  • Error
 File "/home/SP-in-WEB/xindq/couplets/py3gpu/lib/python3.5/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)
  • Reason
    python3.x编码只有str和unicode,服务器Ubuntu编码规则默认读取ascii码,读取非ascii编码数据,如中文,会报错,需要转换Unicode(万国码)。
  • Solve
    (1) 读取文件使用Unicode编码
with open("word.txt", 'r',encoding='utf8') as f:
	a = f.read()

(2) 字符串使用Unicode

str = "苹果"
str.encode('utf8')

7 python3.x字符str输出

  • Demo
str = '苹果'
print('str:' + str.decode('utf8'))
  • Error1
'str' object has no attribute 'decode'
  • Plan
    字符串使用编码属性。
print('str:' + str.encode('utf8'))
  • Error2
TypeError: Can't convert 'bytes' object to str implicitly
  • Solve
print("str:{}".format(str.encode('utf8')))

说明:
str需编码输出str.encode
bytes需解码输出bytes.decode

8 缩进

  • Problem
IndentationError: unindent does not match any outer indentation level
  • Reason
    缩进出现错误,使用tab缩进,而不是空格缩进.
  • Solve
    重新修改问题代码段,使用tab缩进.

9 pillow图像处理

  • Problem
TypeError: unsupported operand type(s) for /: 'PngImageFile' and 'float'
  • Reason
    我也很无奈啊~,这个图片Pillow就是不能解码,放弃挣扎了.
  • Solve
    换一张图片处理.

10 pip命令失效

10.1 pip(2)

  • pip install
Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    from pip import main
ImportError: cannot import name main
  • Resolve
cd /usr/bin
sudo vim pip
from pip import main
if __name__ == "__main__":
	sys.exit(main())
  • Edit
from pip import __main__
if __name__ == "__main__":
	sys.exit(__main__._main())
  • or Edit
from pip._internal import main

10.2 pip3

  • pip3 install
Traceback (most recent call last):
  File "/usr/bin/pip3", line 11, in <module>
    sys.exit(main())
NameError: name 'main' is not defined
  • Resolve
cd /usr/bin
sudo vim pip3
from pip import main
if __name__ == "__main__":
	sys.exit(main())
  • Edit
from pip import __main__
if __name__ == "__main__":
	sys.exit(__main__._main())
  • or Edit
from pip._internal import main

[参考文献]
[1]https://blog.csdn.net/zong596568821xp/article/details/80410416


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值