删除反斜杠继续字符

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

我正在尝试使用 AST 解析一些代码,但由于反斜杠连续字符而遇到问题。

当我有一个连续字符 \ 时,textwrap 将无法缩进代码,我想知道如何摆脱它。

code = """
    def foo():
        message = "This is a very long message that will probably need to wrap at the end of the line!\n \
And it actually did!"
"""

import textwrap
print textwrap.dedent(code)

import ast
ast.parse(textwrap.dedent(code))

我添加更多细节来澄清问题:

我有一个模块 nemo.py,其内容如下:

class Foo(object):

    def bar(self):
        message = "This is a very long message that will probably need to wrap at the end of the line!\n \
And it actually did!"

主模块尝试解析代码:

import ast
import nemo
import inspect
import textwrap

code = str().join(inspect.getsourcelines(nemo.Foo.bar)[0])
ast.parse(textwrap.dedent(code))

和回溯:

Traceback (most recent call last):
  File "/Users/kelsolaar/Documents/Development/Research/_BI.py", line 7, in <module>
    ast.parse(textwrap.dedent(code))
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ast.py", line 37, in parse
    return compile(source, filename, mode, PyCF_ONLY_AST)
  File "<unknown>", line 1
    def bar(self):
    ^
IndentationError: unexpected indent
python
2个回答
2
投票

这是因为你误解了

textwrap.dedent()
的作用。

删除任何常见前导空格。在您的情况下,没有常见的前导空格,因此不会删除任何内容。

而且,在这种情况下,你想要的实际上是

\\
而不是
\n \
。这是因为您实际上想要解析“打印”的内容。 \\ 将仅打印一个
\
,这就是您想要的。
\n \
将在
"..."
子句中打印一个无效的新行。

现在考虑这段代码:

>>> code = """ def foo(): message = "This is a very long message that will probably need to wrap at the end of the line! \\ And it actually did!" """ >>> print textwrap.dedent(code) def foo(): message = "This is a very long message that will probably need to wrap at the e nd of the line! \ And it actually did!" >>> ast.parse(textwrap.dedent(code)) <_ast.Module object at 0x10e9e5bd0>

在这种情况下,有 

common 前导空格,因此它们被删除。

编辑:

如果您想一起摆脱

\

,您可以考虑使用

"""My sentence"""
代替
message
中的
def bar
    


0
投票
code.replace("\n", str())

import ast import nemo import inspect import textwrap code = str().join(inspect.getsourcelines(nemo.Foo.bar)[0]) code.replace("\\\n", str()) ast.parse(textwrap.dedent(code))

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