Py文件首行编码声明coding=utf8导致调用异常。

最近在调用其他人写的模块时发现经常会出现整个文档被当作一个字符串的情况,调用其中的属性会抛出字符串类型没有这个属性的异常,似乎文档没有被正确解析。
查来查去,我发现把顶部文件编码声明# coding=utf8修改为# coding:utf-8就可以正常运行。并且这种情况只是偶尔出现,并不是100%,因为那个同事所有的文件都是用的第一种格式,但是只有个别的会出现异常。
我看到网上说,这里的声明只要符合"coding[:=]\s*([-\w.]+)"这个格式都是可以的,但为什么会有几率出现异常?
请问这个问题是否真的是由于声明格式导致的?这两种声明方式又有什么区别呢?
非常感谢

Python版本:2.7
编辑器:Sublime / PyCharm
运行环境:CentOS

阅读 5.6k
4 个回答

两种声明没有区别, 我觉得问题最大可能在于, 因为那个文件是在windows或者其他不同环境写的, 所以导致该会有些不可见字符, 这在别人的电脑上运行没问题, 但是到了你这边, 可能就会不兼容或者出错.

因为你的文件编码本身不是utf8的吧?你检查下文件编码

这是我的规范( Python 2.7 )

总结「平时不怎么注意,但是十分重要的」的知识点

强制
py 源代码使用 4 空格缩进, 禁止任何 table 符号
py 文件使用 UTF-8 no BOM 编码( GBK编码祸患无穷 )
py 文件使用 Unix 风格换行符( \n )
每一个py文件头添加, 如下内容
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# date:    
# author:  
#
 
 
 
 
from __future__ import absolute_import, unicode_literals

其他:
总是遵守 PEP 8 ( PEP8 是 Python社区的精华之一, 它规定了规范的Python 代码应该怎么写, 大家都是这么遵守的, 所以你也应该遵守 )

这个应该是文件中出现了非UTF-8的字符了吧?
应该是和:或者=没啥关系,utf8都改成utf-8应该就可以了吧?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题