【问题标题】:Avoid syntax error using hyphens in Python在 Python 中使用连字符避免语法错误
【发布时间】:2018-07-30 08:20:44
【问题描述】:

我正在编写一个 python 脚本,通过其 COM 函数使用 Aspen Plus 自动进行一些模拟。但是当我想获得分子量值时,我必须这样写:

import os
import win32com.client as win32

aspen = win32.Dispatch('Apwn.Document')

aspen.InitFromArchive2(os.path.abspath('Aspen\\Flash.bkp'))

MW = aspen.Tree.Data.Properties.Parameters.Pure Components.REVIEW-1.Input.VALUE.MW ACID.Value

但它在 REVIEW-1 中引发语法错误,因为连字符不能用作标识符。我怎么能这样使用它们?

编辑:

我将点语法替换为 Aspen COM 的 FindNode 函数,如下所示:

MW = aspen.Tree.FindNode("\\Data\\Properties\\Parameters\\Pure Components\\REVIEW-1")

但我仍然得到一个 None 对象,但是这个:

MW = aspen.Tree.FindNode("\\Data\\Properties\\Parameters\\Pure Components")

工作,得到“COMObject FindNode”,所以我认为问题也出在连字符上。

提前致谢!

【问题讨论】:

  • 在此之前也有空格。在标识符中使用破折号和空格是无效的python
  • 你试过使用 importlib 吗? docs.python.org/3/library/…
  • 我会看看importlib,但它可以与COM函数一起使用吗?另外,如果有人通过这种方式找到答案,我会更新我的问题
  • 你能从你得到的有效的非无节点中列出可用的子节点吗?我确定这只是一个大小写/连字符类型的问题
  • [也许图片更有帮助][1] [1]:i.stack.imgur.com/4AZtJ.png

标签: python python-3.x win32com aspen


【解决方案1】:

谢谢你的提示

对于有连字符的情况,以下应该起作用,而不是转义“\”字符:

MW = aspen.Tree.FindNode(r'\Data\Properties\Parameters\Pure Components\REVIEW-1\Input\VALUE')

【讨论】:

  • 感谢 Ejay!顺便说一句,我现在正在使用另一个模拟,空格或连字符没有任何问题。所以我什么都不懂!
【解决方案2】:

好的,我试图在 Python 中解决它,但在 Aspen 重命名节点时更容易解决它。我还注意到,空格有时也会出现问题,因此也应该重命名。在某些情况下无法完成或我不知道如何完成,例如:

MW = aspen.Tree.FindNode("\\Data\\Properties\\Parameters\\Pure Components\\REVIEW1\\Input\\VALUE\\MW ACID")

它返回一个 None 对象,我不知道重命名为“MW ACID”,但有一个棘手的方法来获取值:

MW = aspen.Tree.FindNode("\\Data\\Properties\\Parameters\\Pure Components\\REVIEW1\\Input\\VALUE")

for o in MW.Elements:
    if o.Name == "MW ACID":
        MW_acid = o.Value

现在它对我有用,但是由于迭代它会变慢。因此,如果有人知道如何在不重命名名称的情况下在 Python 中解决问题,它仍然会有所帮助。我尝试对不间断连字符使用 unicode 和字节表示法,但它也不起作用。

问候!

【讨论】:

    猜你喜欢
    • 2015-09-16
    • 2021-09-23
    • 2020-02-29
    • 2019-04-11
    • 2022-07-22
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    相关资源
    最近更新 更多