Python 如何捕获非ASCII字符错误?

Python 如何捕获非ASCII字符错误?,python,python-2.7,character-encoding,Python,Python 2.7,Character Encoding,我正在尝试使用以下代码捕获此错误语法错误:非ASCII字符'\xc3': try: address = 'ÁR11E' except: print 'hello' 我永远无法打印“你好”。错误将被视为未处理并停止进程。如何捕获和处理此类错误 我现在只需要捕获错误,而不需要解决它。在Python中无法捕获语法错误(除非它是从eval引发的,这不是您的情况)在Python中无法捕获语法错误(除非它是从eval引发的,这不是您的情况)默认情况下,Python 2源代码应该只包含ASC

我正在尝试使用以下代码捕获此错误
语法错误:非ASCII字符'\xc3'

try:
    address = 'ÁR11E'
except:
    print 'hello'
我永远无法打印“你好”。错误将被视为未处理并停止进程。如何捕获和处理此类错误


我现在只需要捕获错误,而不需要解决它。

在Python中无法捕获语法错误(除非它是从eval引发的,这不是您的情况)

在Python中无法捕获语法错误(除非它是从eval引发的,这不是您的情况)

默认情况下,Python 2源代码应该只包含ASCII字符,因此这是语法错误。您无法捕获它,因为它使整个文件无效

您可以做两件事:

  • 将fie从ASCII转换为其他格式:
#编码:utf-8

  • 或者对非ascii字符进行编码
address='\xC3\x81R11E'#这将是utf-8

address='\xC3\x81R11E'。解码('utf-8')#这将是unicode

address=u'\N{带锐音符的拉丁文大写字母A}R11E'


默认情况下,Python 2源代码应该只包含ASCII字符,因此这是语法错误。您无法捕获它,因为它使整个文件无效

您可以做两件事:

  • 将fie从ASCII转换为其他格式:
#编码:utf-8

  • 或者对非ascii字符进行编码
address='\xC3\x81R11E'#这将是utf-8

address='\xC3\x81R11E'。解码('utf-8')#这将是unicode

address=u'\N{带锐音符的拉丁文大写字母A}R11E'

address=u'\u0381R11E'
第1行(linux)

!usr/bin/env python 第二行(linux)

编码:utf-81行(linux)

!usr/bin/env python 第二行(linux)


编码:utf-8在运行脚本之前还是在脚本中,我必须对字符进行编码?在我的例子中,我必须将包含字符的字符串作为参数传递给python脚本。是否可以在python过程的最开始对参数进行编码?@zhangjingzhou您只有在将字符串写入脚本本身时才会遇到这个问题。从控制台或文件读取并传递它并没有问题。Python可以处理所有这些,只是不允许您在未指定编码的情况下将其输入源代码,以避免歧义。可能值得一提的是“Python2源代码”,因为3.x默认为UTF-8而不是ASCII。(我不认为您需要解释Python 3的情况,也不需要查看UTF-8默认值是一直追溯到3.0还是更晚,等等,因为问题是明确的关于2.7;只说“Python 2”就足够了。)@abarnert您是对的,我更新了答案以澄清这一点。我必须在运行脚本之前或在脚本中对字符进行编码吗?在我的例子中,我必须将包含字符的字符串作为参数传递给python脚本。是否可以在python过程的最开始对参数进行编码?@zhangjingzhou您只有在将字符串写入脚本本身时才会遇到这个问题。从控制台或文件读取并传递它并没有问题。Python可以处理所有这些,只是不允许您在未指定编码的情况下将其输入源代码,以避免歧义。可能值得一提的是“Python2源代码”,因为3.x默认为UTF-8而不是ASCII。(我不认为您需要解释Python 3的情况,也不需要查看UTF-8默认值是一直追溯到3.0还是更晚,等等,因为问题是明确的关于2.7;只说“Python 2”就足够了。)@abarnert您是对的,我更新了答案以澄清这一点。SyntaxError是编译代码的编译器在任何代码运行之前抛出的,因此您无法处理它。(好吧,你可以通过安装一个导入钩子来处理它,但这并不是一件小事,而且你在那里做不了什么好事,所以…)。一般通信原则:文本文件使用字符编码。读取文本文件的程序必须知道它是什么。如果您正在为程序编写代码,请找出它期望的内容或它可以接受的内容,以及如何告诉它您给出的内容。SyntaxError是编译代码的编译器在任何代码运行之前抛出的,因此您无法处理它。(好吧,你可以通过安装一个导入钩子来处理它,但这并不是一件小事,而且你在那里做不了什么好事,所以…)。一般通信原则:文本文件使用字符编码。读取文本文件的程序必须知道它是什么。如果您正在为一个程序编写,请了解它期望什么或它可以接受什么,以及如何告诉它您正在给它什么。您也可以在导入模块时捕获它。您也可以在导入模块时捕获它。您应该始终写一个简短的解释。记住,其他人将来会看到你的答案,看到你为什么做某事的解释会有所帮助。:)你应该总是写一个简短的解释。记住,其他人将来会看到你的答案,看到你为什么做某事的解释会有所帮助。:)