【发布时间】:2013-04-14 00:30:18
【问题描述】:
我得到了以下代码来处理中文字符问题,或者powerpoint文件中的一些特殊字符,因为我想使用ppt的内容作为文件名来保存。
如果它包含一些特殊字符,它会抛出一些异常,所以我使用下面的代码来处理它。
它在 Python 2.7 下运行良好,但是当我使用 Python 3.0 运行时,它给了我以下错误:
if not (char in '<>:"/\|?*'):
TypeError: 'in <string>' requires string as left operand, not int
我用谷歌搜索了错误消息,但我不明白如何解决它。我知道codeif not (char in '<>:"/\|?*'):是把字符转换成ASCII码数吧?
有什么例子可以解决我在 Python 3 中的问题吗?
def rm_invalid_char(self,str):
final=""
dosnames=['CON', 'PRN', 'AUX', 'NUL', 'COM1', 'COM2', 'COM3', 'COM4', 'COM5', 'COM6', 'COM7', 'COM8', 'COM9', 'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5', 'LPT6', 'LPT7', 'LPT8', 'LPT9']
for char in str:
if not (char in '<>:"/\|?*'):
if ord(char)>31:
final+=char
if final in dosnames:
#oh dear...
raise SystemError('final string is a DOS name!')
elif final.replace('.', '')=='':
print ('final string is all periods!')
pass
return final
【问题讨论】:
-
你能不能修改你的代码来捕捉 TypeError 异常,
print(char),然后看看是什么让它窒息?由于某种原因,您的字符串被解释为带有整数的数组。 -
当我打印 char 时,它显示 232。我认为它阻塞了字符串,char-wise?
标签: python character-encoding python-3.x ascii