首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

9102 年了, Python3 首行还有必要加编码注释吗?

  •  1
     
  •   luhuan97 · 104 天前 · 5641 次点击
    这是一个创建于 104 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在帮日本写个项目,快结项了,他们要求全部 py 文件头加上:# -- coding: utf-8 -- 。。。。。。 我没解释,直接就苦逼慢慢改了。

    我理解他们对编码的严谨,但是都 python3 了,,,这有必要吗?我觉得是多余的。你们觉得呢?

    第 1 条附言  ·  103 天前
    首先,谢谢每一个 V 友的回复。
    非常抱歉表达不够准确,我有必要学习一下字字斟酌朋友们。
    在发帖前我没有跟客户 BB,已经用我的方法按照客户要求修改好了,所以说“甲方要的需求就做,哪那么多废话”的朋友,。。。额,你们是对的。
    我“苦逼”那个词不是说这个需求的难度,而是我想表达使用 Python3 的项目还有必要加这个编码注释东西吗?是否多余?我开始接触 Python,他就告诉我怎么优雅的写代码。优雅之道是我所追求的。
    这个项目的生产环境无非就是 ubuntu 或 centos 的 python3。这个是从设计之初就已经确定的了。
    69 回复  |  直到 2019-07-13 15:49:14 +08:00
        1
    congeec   104 天前 via iPhone   ♥ 7
    难道你是手动敲的?
        2
    neroxps   104 天前
    编码严谨 711 不服
        3
    newGamingLife   104 天前
    @congeec 就算是 copy 不也得一个个文件 copy 吗
        4
    luhuan97   104 天前
    @congeec 正常人都知道用 copy,但是文件很多啊,而且我心里是不平衡的,因为我认为是没必要的。
        5
    janxin   104 天前
    这个不是自动加就好了么...

    当然你不需要 Python2 上跑是没什么必要
        6
    Jackxun123   104 天前
    。。和一楼相同的疑问
        7
    luhuan97   104 天前
    @janxin 就是要 python3 开发的,就算放 python2 也运行不了,毕竟不兼容。
        8
    yvescheung   104 天前
    有必要,因为我前几天就遇到过没加编码导致在另一台服务器上输出和注释全部乱码,你永远不知道自己的程序会被放在什么奇怪的环境下运行
        9
    ctro15547   104 天前   ♥ 1
    用 py2 写个首行自动加的脚本不就得了(手动狗头)
        10
    janxin   104 天前
    @luhuan97 这不是有些坑逼会要求 py2/py3 兼容么...
        11
    princelai   104 天前 via Android
    自己写的从来不加,你这为别人写还是按要求吧
        12
    lzvezr   104 天前 via iPhone
    一楼的意思难道不是写个脚本自动加吗
        13
    Jackxun123   104 天前
    我的话,用 sed 对某个文件夹下的所有.py 文件首行添加就行了,还可以加判断是否包含这句=。=
    咋说呢,人家是甲方,他爱咋搞咋搞=。=习惯就好了
        14
    ant2017   104 天前 via Android
    一行命令直接加上的事
        15
    luhuan97   104 天前
    额,各位 v 友,其实我的问题重点在,有没有必要加,,,我知道可以自动加编码注释,我是故意取消的,我知道我在用的是 python3。不是加的难度,是有没有必要。
        16
    ManjusakaL   104 天前 via Android
    有必要啊,,你永远不知道你的代码会被放在什么环境下运行
        17
    lihongjie0209   104 天前
    @luhuan97 有没有必要是甲方决定的, 不是你决定的
        18
    Vegetable   104 天前
    没必要,爸爸说了之后,这就是个需求了,你觉得他们需求都有必要吗?
        19
    lniwn   103 天前
    指定编码和不指定编码,源文件内容是两个不同的编码,这和 py2 或者 py3 没有什么关系。
        20
    ipwx   103 天前
    对于我自己的项目,如果文件内部有非 ASCII 字符,我会加上。

    退一步考虑,就算 Python 3 解释器不关心它,有些编辑器或者 IDE 说不定也会关心它。

    加了又不会怀孕 😒
        21
    tennc   103 天前
    手敲的大佬 膜拜下~~
    py 写脚本 头部都是自动生成( ide )。。。。
        22
    Hanggi   103 天前
    9102 年是什么梗?只是单纯倒过来写显得都什么年代了?
        23
    devcat   103 天前   ♥ 2
    2019 年了,还在用 9012 这种烂梗吗?
        24
    BinRelay   103 天前
    @devcat 没事 明年就没人用了
        25
    Keyes   103 天前 via iPhone
    写好模版了,真心生命远离手打 233
        26
    Trim21   103 天前 via Android   ♥ 1
    @lniwn py3 默认 utf8 所以不指定跟指定 utf8 在 py3 下面是相同的
        27
    ytmsdy   103 天前
    就算爸爸说每个文件里面要加一个雅美蝶,也要加啊!
        28
    lniwn   103 天前   ♥ 1
    @Trim21 #26 刚看了下,确实我记错了,py3 默认使用 utf8 解析源文件,py2 默认使用 ascii 解析源文件。
    https://docs.python.org/3/howto/unicode.html
    https://www.python.org/dev/peps/pep-0263/
        29
    Davic1   103 天前
    问: 有什么影响?
        30
    BinRelay   103 天前
    我一直觉得加这个很不合理。
    注释就应该是注释,加与不加完全没有任何区别。不应该承担任何功能。
        31
    cedoo22   103 天前
    这个 直接再写一个 py,给加上不就行了??要怎么苦逼?不要堆代码。
        32
    rocketman13   103 天前
    画蛇要添足吗?
        33
    lithiumii   103 天前
    我一直是不加的,但是遇到过因为没加导致的报错
        34
    Universe   103 天前   ♥ 8
    find . -name "*.py" | xargs grep -L '# -- coding: utf-8 --' | xargs sed -i '2 a# -- coding: utf-8 --'
    一行的事搞那么纠结干啥。。
        35
    hahaayaoyaoyao   103 天前 via Android
    @Universe 这个才是标准思路。
        36
    pkookp8   103 天前 via Android   ♥ 2
    楼主只是描述了一个背景,对其中的事感到奇怪,超脱背景后讨论这件事奇不奇怪
    怎么这么多人说背景和怎么做这件事
    不管是脚本还是手动 copy 甚至手打,楼主应该是做完了才来问的
    对于这个奇怪的注释设定,我不知道,但我不加自己的脚本也能跑,没有细究过
        37
    newtype0092   103 天前
    @devcat 因为明年就用不了了啊。。。
        38
    sikariba   103 天前
    既然明确说了是 py3 的项目,那我觉得没必要
        39
    karllynn   103 天前
    py3 项目不需要加…

    用 sed 直接加上就行
        40
    inframe   103 天前 via Android
    pycharm 兴建文件时设置好模板就好
        41
    luhuan97   103 天前
    @Universe 我靠,这大佬,佩服。但是我改完才来发帖的。复制粘贴也没那么麻烦。 只是感觉没必要、多余而已。
        42
    40huo   103 天前 via Android
    拒绝 py2 的流毒,不加
        43
    yingqi7   103 天前 via iPhone
    @luhuan97 #15 废话,人家让加就加啊,有总比没有好不是吗
        44
    youngxu   103 天前 via Android
    @luhuan97 这也不知道的话…你是怎么会写程序的?程序不就是为了帮人类解决简单重复的工作而发明的吗
        45
    realcaoqi95   103 天前
    编辑器自动加的...
        46
    hhhsuan   103 天前 via Android
    一个 sed 全部搞定
        47
    reus   103 天前
    和你用不用 python3 有什么关系?执行环境你又不能控制。
    这种事情要慎重考虑,“ 9102 ”年不是什么好的理由。
        48
    reus   103 天前
    哎,没吃过亏的年轻人啊!
        49
    reus   103 天前
    而且,什么叫“苦逼慢慢改”?你一个写程序的,就算你不会用 concat 命令,难道连写个脚本去改都不会吗?
        50
    Torjan   103 天前
    @lniwn nice
        51
    witcherhope   103 天前 via iPhone
    9102 年,2020 看你怎么说
        52
    laike9m   103 天前 via Android
    不论是公司还是个人项目都不加。。
        53
    anonymous256   103 天前 via Android
    既然是 py3 的项目,就可以不用写。 楼上有的人说执行环境的问题,py3 的解释器已经默认使是 utf-8。难不成你 py3 的代码,强行要在 py2 解释器运行?除非一开始就打算要兼容 py2 和 py3 两个版本。

    顺便吐槽一下,我同事也喜欢这么干(多此一举的事情),我用 with open 打开了项目中的文本,code review 的时候,同事让我用 try-except 去捕捉这个异常。这明明是一个不可能发生的异常(除非代码被人恶意做了手脚)。如果连这种异常都要去捕捉,那我每个 import 语句都要 try-except 了,因为理论上,我项目里的 py 文件和第三方库,还有可能被人偷了呢。 何必多此一举?
        54
    zkqiang   103 天前
    用 IDE 自动加就行了... 加就加呗,也不是什么难事


    另外我赞同 @anonymous256 吐槽的情况,有的人用 Python 这么灵动的语言,就是能写出笨重的代码出来...
    处处捕获异常,处处考虑兼容 3.5 之前的版本,以及大量重复代码堆积的属性和 getter setter
        55
    diferent   103 天前
    sed
        56
    falcon05   103 天前 via iPhone
    手动 copy ……
        57
    lihongjie0209   103 天前
    @anonymous256 windows 下打开一个已打开的文件会报错, linux 下不会
        58
    lihongjie0209   103 天前
    如果甲方让你把所有的变量名,方法名都改为日文命名, 你也必须改. 因为对方是甲方
        59
    mon6912640   103 天前
    不用,py2 遗留的东西,因为这个编码问题才会用 py3 的
        60
    fuxiuyin   103 天前
    如果从使用的角度来讲,在一个自己未知的环境部署,还是有必要的。python3 文档里是"By default, Python source files are treated as encoded in UTF-8."注意一下 *default* ,如果程序部署在自己不掌握的环境,尤其是交给别人去部署,这种 *default* 就是不可信的,因为你永远无法知道他们的环境是怎么样的,python 设置呀什么的,甚至他们用的有可能是自己魔改后的 python 解析器。
        61
    ClericPy   103 天前
    以前一直以为 py3 不需要 shebang 上加编码的,结果有天发现报错了,复现原理是

    在 Windows 平台上
    如果一大串字符串里有从网页复制的非法字符时候, 会报错
    SyntaxError: Non-UTF-8 code starting with '\xe0' in file
    但是 shebang 带上# ! coding:utf-8 就不报错

    以前我在群里和人讨论过

    https://gist.githubusercontent.com/ClericPy/7ef32e1456df013dfd97cbd2b5835238/raw/932a69a10477408ef771a3dc3146611bee0eba04/test_python3_encoding_error.py


    可以试试去掉 shebang 那句
        62
    lolizeppelin   103 天前
    这玩意只有你代码文件里有相关字符串才需要啊...你代码文件里没有其他编码的当然不需要啊

    你引用的库也不会在每个文件里都带这个头啊(其实大部分库都没带头,因为人家都用英文),

    不过在东亚国家注释得写母语的话,233333
        63
    fredshao   103 天前
    Python3 不是默认 utf8 吗?
        64
    laqow   103 天前 via Android
    日文编码比中文水还深,给日本供货编码细节注意一下还是合理的吧
        65
    siteshen   103 天前
    一个肯定没问题的方案,一个可能有问题的方案,我倾向于选择前者。
        66
    autogen   103 天前
    没有加的习惯。。。
        67
    ly931003   103 天前 via Android
    讲道理会编程检测一下首行让后自动加不就好了,反正 ascii 文件嘛
        68
    qile1   103 天前 via Android
    @ipwx 为啥我 Windows 10 系统,有时候编辑 py 文件没问题,但是过几天再用 utf 编码打开就乱码,用记事本打开在复制到文本编辑器里面保存会好,过几天又不行,html 和 js 文件也一样效果
    编辑器用的是 nd+
        69
    ipwx   102 天前
    @qile1 不知道,我不用记事本或者 nd+。会不会是 BOM 问题?

    我一般用 Visual Studio Code 或者 PyCharm。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4530 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 53ms · UTC 02:40 · PVG 10:40 · LAX 19:40 · JFK 22:40
    ♥ Do have faith in what you're doing.