【问题标题】:Unwanted assignment of double quote in string字符串中不需要的双引号分配
【发布时间】:2020-09-10 13:44:51
【问题描述】:

所以我有一个这样的列表:

['a', 'b', 'c', 'd', 'e' ]

我已将此列表转换为字符串:

"'a', 'b', 'c', 'd', 'e'"

字符串周围的双引号仅用于环绕单个引号 - 我需要单个引号。问题是当我将这个字符串输入到一个只接受这个的包时:

'a', 'b', 'c', 'd', 'e'

当然,有一个错误。现在,我尝试了.replace(' " ' , ' ')字符串切片,以及所有其他提到的here。什么都不起作用,因为双引号不是字符串的一部分,而只是为了打印它而存在,并且在赋值期间被带到变量中。

编辑:

这是我如何将列表转换为字符串的部分内容:

string=''
# ...
string = string + (" '%s '," %(items) )

由于以下评论,请编辑以添加更多信息:

我正在玩这个tool。在下面的示例中,我要说的是我正在自动生成一些变量以放入第三行,但无论我做什么,它总是在字符串周围加上一个逗号:

from dd import autoref as _bdd
bdd = _bdd.BDD()
bdd.declare('x', 'y', 'z') # ----------------------<this line>
u = bdd.add_expr('(x /\ y) \/ ~ z')
bdd.collect_garbage()  # optional
bdd.dump('awesome.pdf')

我得到的错误是:

AssertionError: undefined variable "a", known variables are:
 {"'x', 'y', 'z'": 0}

如果您只需将第三行替换为以下内容,您将能够生成此错误:

bdd.declare("'x', 'y', 'z'")

【问题讨论】:

  • 请检查上面的编辑文本。不幸的是,错误的原因是我已经解释过的——一个额外的逗号被传递给变量,因为手动输入 没有额外的逗号不会给我任何错误。

标签: python python-3.x string parameter-passing comma


【解决方案1】:

TL/DR:需要提供单个字符串名称 - 解决方案进一步向下。


minimal reproducible example 最酷的一点是我可以很容易地看到你在做什么:

bdd.add_expr(...) 方法希望 names 变量作为单个字符串 - 您尝试提供具有组合名称的字符串,无论您如何添加或交错字符串分隔符,这都不起作用。 p>

原始模块代码的链接也很有帮助。 bdd.py 中没有 declare() 方法 - 所以我查看了它的构造函数 class BDD(_abc.BDD): 并在它的基类中找到了该方法:_abc.py - delcare implementation 这给了你:

def declare(self, *variables):
    """Add names in `variables` to `self.vars`.
    ```python
    bdd.declare('x', 'y', 'z')
    ```
    """
    for var in variables:
        self.add_var(var)

你可以阅读更多关于这种参数传递的信息。这里:


解决方案 - 改为提供名称:

from dd import autoref as _bdd

your_list = ['x', 'y', 'z']

bdd = _bdd.BDD()
bdd.declare(*your_list )   # provide list elements as single strings to function
u = bdd.add_expr('(x /\ y) \/ ~ z')
bdd.collect_garbage()  # optional
bdd.dump('awesome.pdf')

如果你真的想从一个字符串开始,你根本不需要字符串分隔符,只需提供名称:

from_string = "'x', 'y', 'z'" 

# this undoes all the stringifying of your list
as_list = from_string.translate(str.maketrans("", "", "',")).split()

bdd = _bdd.BDD()
bdd.declare(*as_list)   # provide list elements as single strings to function
u = bdd.add_expr('(x /\ y) \/ ~ z')
bdd.collect_garbage()  # optional
bdd.dump('awesome.pdf')

【讨论】:

    猜你喜欢
    • 2019-01-22
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-02
    • 2011-12-14
    • 2014-09-20
    • 2021-11-01
    相关资源
    最近更新 更多