我在将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中的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)
但我得到错误"列表索引超出范围." 也许我的整个方法都存在缺陷,有更好的方法可以实现我想要的目标吗?任何暗示我都会感激不尽.
谢谢!