【问题标题】:Python encoding errors from comments containing Windows paths来自包含 Windows 路径的注释的 Python 编码错误
【发布时间】:2021-10-03 19:13:30
【问题描述】:

我想在 python 脚本 cmets 中包含 Windows 路径,而不会导致编码错误。

如果我在评论中包含 Windows 路径,我有时会收到编码错误,例如,“UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa6 in position 4612: invalid start byte”。
我发现一篇“文章”指出在评论中包含 Windows 路径会触发 unicode 错误,https://programmersought.com/article/28013377080/

另一方面,有时我可以在评论中包含 Windows 路径,而不会触发 unicode 错误。 我不明白为什么某些 Windows 路径会触发错误,而其他路径不会。

以下是一些会导致或不会导致编码错误的 Windows 路径示例,如下所示:

'''

OK      # E:\Apps\ParticlesByMarc\regularexpression_info_SAVE_aaa_.py
ERROR   # E:\Apps\UnitiesByMarc\regularexpression_info_SAVE_aaa_.py
OK      # E:\Apps\ UnitiesByMarc\regularexpression_info_SAVE_aaa_.py# File 
ERROR   # E:\ Apps\ UnitiesByMarc\xxx\regularexpression_info_SAVE_aaa_py
OK      # E:\ Apps\ UnitiesByMarc\ xxx\regularexpression_info_SAVE_aaa_py
OK      # File E:\ Apps\ UnitiesByMarc\x123x\regularexpression_info_SAVE_aaa_py

'''

我不知道是什么让这两种 Windows 路径格式可以包含在评论中,而其他四种不能包含在评论中。

我的问题:

  1. 我可以做些什么来格式化评论,这样我就不必在每个反斜杠后插入空格?
  2. 如果评论中可以包含其他文本限制,我在哪里可以找到这些限制的列表?
  3. 我在哪里可以找到识别和解释限制原因的规则?

非常欢迎任何有关如何找到答案的建议。

谢谢, 马克

【问题讨论】:

  • 了解Escape Sequences\u\U\x等的特殊含义……
  • 非常感谢您的参考。因为我还没有学过任何C语言,所以我不明白其中的一些,也许是大部分。但我得到的印象是,当我将 Windows 路径放入 cmets 时,最好的解决方法是用正斜杠替换 Windows 反斜杠。除此之外,这有点超出我的想象。但现在我知道这是我必须学习的东西。所以,谢谢。
  • 您可以使用 原始字符串(在同一链接中解释)r'''E:\Apps\UnitiesByMarc\regularexpression_info_SAVE_aaa_.py'''
  • 再次感谢您。这是一个很好的解决方案,但我的目标是在多行三重引号 cmets 中包含 Windows 路径。例如,如果我做出这样的评论,我会收到一条错误消息:“”“Hello [new line character] r'''E:\Apps\UnititiesByMarc\regularexpression_info_SAVE_aaa_.py''' [new line character]” ""

标签: python-3.x comments python-unicode unicode-string unicode-literals


【解决方案1】:

三引号字符串不是注释;这是一个可以变成Docstring的字符串:

docstring 是作为第一条语句出现的字符串文字 在模块、函数、类或方法定义中。这样的文档字符串 成为该对象的__doc__ 特殊属性。

示例

def somefunc(somepar):
  r'''
This is a docstring

  E:\Apps\ParticlesByMarc\regularexpression_info_SAVE_aaa_.py
  E:\Apps\UnitiesByMarc\regularexpression_info_SAVE_aaa_.py
# E:\Apps\UnitiesByMarc\regularexpression_info_SAVE_aaa_.py # File 
# E:\Apps\UnitiesByMarc\xxx\regularexpression_info_SAVE_aaa_py
  E:\Apps\UnitiesByMarc\xxx\regularexpression_info_SAVE_aaa_py
# File E:\Apps\UnitiesByMarc\x123x\regularexpression_info_SAVE_aaa_py

  '''
  print('supplied:', somepar, end='\n\n')
  '''
This isn't recognized as a docstring (i.e. not assigned to __doc__)
  '''


somefunc('par')
help(somefunc)

结果.\SO\68553726.py

supplied: par

Help on function somefunc in module __main__:

somefunc(somepar)
    This is a docstring

      E:\Apps\ParticlesByMarc\regularexpression_info_SAVE_aaa_.py
      E:\Apps\UnitiesByMarc\regularexpression_info_SAVE_aaa_.py
    # E:\Apps\UnitiesByMarc\regularexpression_info_SAVE_aaa_.py # File
    # E:\Apps\UnitiesByMarc\xxx\regularexpression_info_SAVE_aaa_py
      E:\Apps\UnitiesByMarc\xxx\regularexpression_info_SAVE_aaa_py
    # File E:\Apps\UnitiesByMarc\x123x\regularexpression_info_SAVE_aaa_py

【讨论】:

  • 亲爱的 JosefZ,我感激不尽。我花了几天时间试图找出问题所在,但我显然不明白可能应该很明显的解决方案。感谢您向我展示解决方案。
  • 亲爱的 JosefZ,我需要认真研究一下您提请我注意的 Docstring 材料。但我无法抗拒 ---> 仅供参考,请参阅 Guido 的推文twitter.com/gvanrossum/status/…
  • @MarcB.Hankin 对不起,我不是 Twitter(和类似的)用户……
  • 我也不是。你没有理由道歉。你太棒了。你给我的帮助是无价的,多年来我一直在努力解决这个问题。我不能感谢你。我性格活泼的一面促使我将 Guido 的声明提请你注意,因为我认为你会知道这件事。我希望我能回报你给我的所有帮助。马克
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-10
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多