小编Tho*_*mas的帖子

以unicode字符串作为名称的namedtuple

我在将unicode字符串指定为namedtuple的名称时遇到了麻烦.这有效:

a = collections.namedtuple("test", "value")
Run Code Online (Sandbox Code Playgroud)

这不是:

b = collections.namedtuple("??????????", "value")
Run Code Online (Sandbox Code Playgroud)

我收到了错误

Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/usr/lib64/python3.4/collections/__init__.py", line 370, in namedtuple
        result = namespace[typename]
KeyError: '??????????'
Run Code Online (Sandbox Code Playgroud)

为什么会这样?文档说,"Python 3还支持在标识符中使用Unicode字符",关键是有效的unicode?

python unicode python-3.x python-collections

8
推荐指数
1
解决办法
649
查看次数

python:conditinoally拆分字符串

关于python中的split有很多问题,但我找不到与我的问题相对应的问题.我想拆分一个字符串,但需要为拆分器设置不同的值,具体取决于条件.对于测试用例,我的字符串是"11xx22xx33xxBEGINxx44xx55xxENDxx66xx77".我想以块的形式处理这个字符串,这意味着我想像这样一步一步:

分开'11',用它做点什么

分开'22',用它做点什么

分开'33',用它做点什么

拆分'BEGINxx44xx55xxEND',用它做点什么

分开'66',用它做点什么

分开'77',用它做点什么

我尝试了一个递归函数:

import string

mystring = "11xx22xx33xxBEGINxx44xx55xxENDxx66xx77"

def makechunks(s):
    try: splitter
    except NameError:
        splitter = "xx"
    whole = s.split(splitter, 1)
    current = whole[0]
    try: whole[1]
    except NameError:
        return
    else:
        rest = whole[1]
        if current.find("BEGIN", 0, 5):
            splitter = "END"
        else:
            splitter = "xx"
        makechunks(rest)
        print("AA", current, "BB")

makechunks(mystring)
Run Code Online (Sandbox Code Playgroud)

但我得到错误"列表索引超出范围." 也许我的整个方法都存在缺陷,有更好的方法可以实现我想要的目标吗?任何暗示我都会感激不尽.

谢谢!

python

2
推荐指数
1
解决办法
146
查看次数

标签 统计

python ×2

python-3.x ×1

python-collections ×1

unicode ×1