SyntaxError:函数返回'£'时文件中的非ASCII字符'\ xa3'

SNI*_*dog 265 python unicode python-unicode

说我有一个功能:

def NewFunction():
    return '£'
Run Code Online (Sandbox Code Playgroud)

我想在它前面打一些带有井号的东西,当我尝试运行这个程序时它会输出错误,显示以下错误信息:

SyntaxError: Non-ASCII character '\xa3' in file 'blah' but no encoding declared;
see http://www.python.org/peps/pep-0263.html for details
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何在返回功能中加入英镑符号?我基本上是在课堂上使用它,它'__str__'包含在包含英镑符号的部分内.

Sil*_*Ray 356

我建议阅读错误给你的PEP.问题是您的代码尝试使用ASCII编码,但井号符号不是ASCII字符.尝试使用UTF-8编码.您可以从# -*- coding: utf-8 -*-.py文件的顶部开始.要获得更高级的功能,您还可以在代码中逐个字符串地定义编码.但是,如果您尝试将英镑符号文字放入代码中,则需要一个支持整个文件的编码.


tuc*_*son 293

添加以下两行坐在我的.py脚本的顶部为我工作(第一行是必要的):

#!/usr/bin/env python
# -*- coding: utf-8 -*- 
Run Code Online (Sandbox Code Playgroud)

  • 第一行是使py文件在* nix上可执行。它与这个问题并没有真正的关系。 (2认同)

pla*_*aes 55

首先将该# -*- coding: utf-8 -*-行添加到文件的开头,然后u'foo'用于所有非ASCII unicode数据:

def NewFunction():
    return u'£'
Run Code Online (Sandbox Code Playgroud)

或者使用自Python 2.6以来可用的魔法使其自动化:

from __future__ import unicode_literals
Run Code Online (Sandbox Code Playgroud)

  • 如果你有``# - * - coding:utf-8 - * - ``你不需要在你的unicode字符串前加上``u`` (12认同)

小智 12

在脚本中添加以下两行为我解决了这个问题。

# !/usr/bin/python
# coding=utf-8
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你 !

  • 这实际上重复了 2013 年的早期答案。到底在第一行的 shebang 中放置什么内容在某种程度上取决于系统,但超出了此处讨论的范围。 (2认同)
  • 另外,“#”和“!”之间不能有空格 (2认同)

tri*_*eee 11

错误消息告诉您究竟出了什么问题.Python解释器需要知道非ASCII字符的编码.

如果你想返回U + 00A3那么你可以说

return u'\u00a3'
Run Code Online (Sandbox Code Playgroud)

它通过Unicode转义序列以纯ASCII表示此字符.如果要返回包含文字字节0xA3的字节字符串,那就是

return b'\xa3'
Run Code Online (Sandbox Code Playgroud)

(在Python 2中,它b是隐式的;但显式优于隐式).

在错误信息的链接PEP指示您究竟如何来告诉Python"这个文件不是纯ASCII;这里是我使用的编码".如果编码是UTF-8,那就是

# coding=utf-8
Run Code Online (Sandbox Code Playgroud)

或与Emacs兼容

# -*- encoding: utf-8 -*-
Run Code Online (Sandbox Code Playgroud)

如果您不知道编辑器使用哪种编码来保存此文件,请使用十六进制编辑器和一些谷歌搜索来检查它.Stack Overflow 标签有一个标签信息页面,其中包含更多信息和一些故障排除提示.

在许多词中,在7位ASCII范围(0x00-0x7F)之外,Python不能也不能猜测字节序列代表什么字符串.https://tripleee.github.io/8bit#a3显示字节0xA3执行21个可能的解释,并从传统的8位编码是唯一; 但它也可能是多字节编码的第一个字节.但事实上,我猜你实际上是在使用Latin-1,所以你应该拥有

# coding: latin-1
Run Code Online (Sandbox Code Playgroud)

作为源文件的第一行或第二行.无论如何,在不知道该字节应该代表哪个字符的情况下,人类也无法猜测这一点.


use*_*ser 5

您可能正在尝试使用 Python 2 解释器运行 Python 3 文件。当前(截至 2019 年)python,在 Windows 和大多数 Linux 发行版上安装两个版本时,命令默认为 Python 2。

但是,如果您确实在处理 Python 2 脚本,本页尚未提及的解决方案是以 UTF-8+BOM 编码重新保存文件,这将在文件开头添加三个特殊字节,它们将明确通知 Python 解释器(和您的文本编辑器)有关文件编码的信息。


归档时间:

查看次数:

342938 次

最近记录:

6 年 前