关于 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 源代码的字符编码; 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 和字符集的绝对最低限度(没有任何借口!) 作者:乔尔·斯波尔斯基。