在python中检查字符串的python语法?

在python中检查字符串的python语法?,python,Python,假设我有一根绳子 s=""" print 'hi' print 'hi' print 3333/0 """ 是否有一个模块或方法可以帮助我检查这个字符串的语法 我希望输出如下: 第2行,缩进 第3行,被零除 我听说过pyFlakes、pyChecker和pyLint,但它们检查的是文件,而不是字符串。compile()函数将告诉您编译时错误: try: compile(s, "bogusfile.py", "exec") except Exception as e:

假设我有一根绳子

s="""

print 'hi'
    print 'hi'
print 3333/0
"""
是否有一个模块或方法可以帮助我检查这个字符串的语法

我希望输出如下:

第2行,缩进 第3行,被零除

我听说过pyFlakes、pyChecker和pyLint,但它们检查的是文件,而不是字符串。

compile()函数将告诉您编译时错误:

try:
    compile(s, "bogusfile.py", "exec")
except Exception as e:
    print "Problem: %s" % e
请记住:一个错误会阻止其他错误被报告,而您的一些错误(零除法)是运行时错误,而不是编译器检测到的错误。

compile()函数将告诉您有关编译时错误的信息:

try:
    compile(s, "bogusfile.py", "exec")
except Exception as e:
    print "Problem: %s" % e
s="""

print 'hi'
    print 'hi'
print 3333/0
"""
eval(s)
但是请记住:一个错误将阻止其他错误被报告,并且您的一些错误(零除法)是运行时错误,而不是编译器检测到的错误

s="""

print 'hi'
    print 'hi'
print 3333/0
"""
eval(s)
输出:

Traceback (most recent call last):
  File "prog.py", line 7, in <module>
    eval(s)
  File "<string>", line 3
    print 'hi'
        ^
SyntaxError: invalid syntax
回溯(最近一次呼叫最后一次):
文件“prog.py”,第7行,在
评估(s)
文件“”,第3行
打印“嗨”
^
SyntaxError:无效语法
输出:

Traceback (most recent call last):
  File "prog.py", line 7, in <module>
    eval(s)
  File "<string>", line 3
    print 'hi'
        ^
SyntaxError: invalid syntax
回溯(最近一次呼叫最后一次):
文件“prog.py”,第7行,在
评估(s)
文件“”,第3行
打印“嗨”
^
SyntaxError:无效语法

如果希望字符串跨越多行,请使用三重引号。下面的答案看起来不错。为便于将来参考,获取文件的api也将与“类似文件的对象”一起使用,请参阅StringIO模块,该模块可用于生成可像读取文件一样读取的字符串。如果希望字符串跨越多行,请使用三重引号。。下面的答案看起来不错。作为将来的参考,获取文件的api也将与“类似文件的对象”一起使用,请参阅StringIO模块,该模块可用于生成一个字符串,该字符串可以像读取文件一样读取。嗯,是的,但我希望远离文件,这里没有文件I/O。。。“bogusfile.py”只是编译器用作文件名的名称。也许你可以告诉我们更多关于你试图解决的整个问题?嗯,我希望它能给我一些错误,包括除法为零,可能使用execfile,但使用字符串(如果可能)和更改名称空间可以吗?我不知道,我也希望它能显示所有的错误,直到尝试运行代码时才能捕捉到“零除”。这就是Python的工作原理。嗯,是的,但我希望远离文件,这里没有文件I/O。。。“bogusfile.py”只是编译器用作文件名的名称。也许你可以告诉我们更多关于你试图解决的整个问题?嗯,我希望它能给我一些错误,包括除法为零,可能使用execfile,但使用字符串(如果可能)和更改名称空间可以吗?我不知道,我也希望它能显示所有的错误,直到尝试运行代码时才能捕捉到“零除”。Python就是这样工作的。