Python 中 exec 调用的语法错误

问题描述 投票:0回答:1

关于 exec 命令的快速 python 问题。我有 Python 2.7.6,并尝试利用 exec 运行存储在 .txt 文件中的一些代码。我遇到了语法错误,但不完全确定是什么原因导致的。

Traceback (most recent call last):
   File "/Users/XYZ/Desktop/parser.py", line 46, in <module>
        try_code(block)
   File "<string>", line 1
        x = 'Hello World!'
            ^
   SyntaxError: invalid syntax

我最初以为它在抱怨回车符,但是当我尝试编辑它们时,将它们替换为“ ”,我仍然收到此错误消息。我尝试过各种变体来查看问题所在,并且它总是将错误声明为程序运行 exec 时遇到的第一个 ' 或 " 。

这里是try_code(block)方法

def try_code(block):
    exec block

以及节目主体

inputFile = open('/Users/XYZ/Desktop/test.txt', 'r+')

starter = False
finished = False
check = 1
block = ""

for val in inputFile:
    starter = lookForStart(val)
    finished = lookForEnd(val)

    if lookForStart:
        check = 1
    elif finished:
        try_code(block)

    if check == 1:
        check = 0
    elif finished == False:
        block = block + val

基本上我正在尝试导入一个文件(test.txt),然后在其中查找一些嵌入的代码。为了方便起见,我用指示器包围了它,从而开始和结束。然后我将所有隐藏代码连接成一个字符串并对其调用 try_code 。然后 try_code 尝试执行它(它确实成功了,请检查 print 语句)并因语法错误而失败。

作为注释,如果我隐藏了类似的东西,它就可以正常工作

x = 5
print x

所以无论问题是什么,似乎都是出于某种原因处理字符串。


编辑

文本编辑似乎包含一些无法正常显示的额外字符。我在不同的文本编辑器(文本管理员)中重写了测试文件,看起来字符已经消失了。非常感谢大家帮我解决了我的问题,非常感谢。

python syntax exec
1个回答
0
投票

这是一个字符编码问题。除非您已在文件顶部显式声明了 Python 源代码的字符编码; Python 2 上默认为“ascii”。

您尝试执行的代码包含非 ASCII 引号:

>>> print b'\xe2\x80\x98Hello World\xe2\x80\x99'.decode('utf-8')
‘Hello World’

修复它;使用普通单引号代替:

'Hello World'
.

您可以使用解码方法检查

block
是否不包含非ascii字符:
block.decode('ascii')
如果有则引发异常。

对主题的温和介绍:每个软件开发人员绝对必须了解 Unicode 和字符集的绝对最低限度(没有任何借口!) 作者:乔尔·斯波尔斯基

© www.soinside.com 2019 - 2024. All rights reserved.