【问题标题】:How do I change the name of an XML tag in Hy?如何在 Hy 中更改 XML 标记的名称?
【发布时间】:2016-05-07 23:39:46
【问题描述】:

这是我在这里的第一篇文章...

我正在尝试在 Hy(在 Python 3 上运行)中使用 assignment 更改 XML 元素。

当我尝试运行代码 sn-p:

(setv tco (BeautifulSoup "<meek/>" 'xml))
(setv (. tco meek name) "defl")
(print (. tco meek name))
;(assoc (. tco defl) "new" "value")
(.append (. tco meek) "Kool Stuff")
(print (.prettify tco))

我得到错误:

Traceback(最近一次调用最后一次):文件“/usr/bin/hy”,第 9 行,在 load_entry_point('hy==0.11.0', 'console_scripts', 'hy')() 文件“/usr/lib/python3/dist-packages/hy/cmdline.py”,第 347 行,在 hy_main sys.exit(cmdline_handler("hy", sys.argv)) 文件“/usr/lib/python3/dist-packages/hy/cmdline.py”,第 335 行,在 cmdline_handler return run_file(options.args[0]) 文件“/usr/lib/python3/dist-packages/hy/cmdline.py”,第 210 行,在 run_file import_file_to_module("ma​​in", filename) 文件“/usr/lib/python3/dist-packages/hy/importer.py”,第 78 行,在 import_file_to_module eval(ast_compile(_ast, fpath, "exec"), mod.dict) 文件“code-trace.hy”,第 196 行,在 (setv (.tco meek name) "defl") AttributeError: 'NoneType' object has no attribute 'name'

运行第二行注释:

(setv tco (BeautifulSoup "<meek/>" 'xml))
;(setv (. tco meek name) "defl")
(print (. tco meek name))
;(assoc (. tco defl) "new" "value")
(.append (. tco meek) "Kool Stuff")
(print (.prettify tco))

没有错误(必须使用代码而不是块引用进行标记,以便正确显示):

meek
<?xml version="1.0" encoding="utf-8"?>
<meek>
 Kool Stuff
</meek>

请注意,这只是针对大型程序的一些测试代码。我也遇到了第 4 行评论的 assoc 的问题。

【问题讨论】:

    标签: python python-3.x beautifulsoup hy


    【解决方案1】:

    这是一个奇怪的!看起来更改名称会使 (.tco meek) 变为 None,它确实没有名称属性。所以你必须抓住那个错误。然后你必须参考 (.tco defl) 因为这是在赋值后知道的。这行得通。

    #+BEGIN_SRC hy
    (import [bs4 [BeautifulSoup]])
    
    (setv tco (BeautifulSoup "<meek/>" 'xml))
    (try (setv (. tco meek name) "defl") (except [e Exception] (print e)))
    (print (. tco defl))
    (assoc (. tco defl) "new" "value")
    (.append (. tco defl) "Kool Stuff")
    (print (.prettify tco))
    
    #+END_SRC
    #+RESULTS:
    : 'NoneType' object has no attribute 'name'
    : <defl/>
    : <?xml version="1.0" encoding="utf-8"?>
    : <defl new="value">
    :  Kool Stuff
    : </defl>
    

    如果您查看 hy 生成的 Python:

    #+begin_example
    from hy import HySymbol
    from bs4 import BeautifulSoup
    tco = BeautifulSoup(u'<meek/>', HySymbol(u'xml'))
    try:
        tco.meek.name = u'defl'
        _hy_anon_var_1 = tco.meek.name
    except Exception as e:
        _hy_anon_var_1 = print(e)
    print(tco.defl)
    tco.defl[u'new'] = u'value'
    tco.defl.append(u'Kool Stuff')
    print(tco.prettify())
    #+end_example
    

    您可以在此行中看到错误:_hy_anon_var_1 = tco.meek.name。我猜 tco.meek.name 在运行之前的行之后不存在,所以你得到了错误。不知道为什么hy会这样展开,好像和代码中使用(.)有关,因为其他的setv表达式不会这样展开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      相关资源
      最近更新 更多