2017-09-08 90 views
0

继发现是我的代码,我执行ORD()预期的字符,但长度为0的字符串在Python代码

https://github.com/federico-terzi/gesture-keyboard/blob/master/learn.py

执行我收到代码后,

文件 “learn.py” 57行,在

number = ord(category) -ord('a') 

TypeError: ord() expected a character, but string of length 0 found

我该如何解决?

+0

通过将东西放入'category'中,这似乎是一个空列表。 – GPhilo

+0

另外,请阅读[如何写好问题的指导方针](https://stackoverflow.com/help/how-to-ask),代码应该都在问题中,应避免与github的链接(因为他们可能随时破坏) – GPhilo

+0

我是这个世界的新手,所以请原谅我的错误。它迫切需要解决查询问题。下次会照顾:) –

回答

0

项目数据目录包含许多文件,其文件名以_开头,如_sample_t10_34.txt

因此,在你的代码

for path, subdirs, files in os.walk(root): 
    for name in files: 
     category = name.split("_")[0] # here category = '' 

现在的下一行是:

number = ord(category) - ord("a") 

这里ord()需要长度为1 str类型的参数,你得到这个错误,因为类别将某个是一个空字符串'',当名称为_sample_t10_34.txt的文件被读取时。

你可以做的是跳过以_开头的文件,通过检查if statement文件是否不以_开头。

for path, subdirs, files in os.walk(root): 
    for name in files: 
     if not name.startswith('_'): 
      # code here after if statement 
      category = name.split("_")[0] 
      number = ord(category) - ord("a") 
      # rest of code.. 
+0

我试过你的解决方案,但我得到新的错误,IndentationError:unindent不匹配任何外部缩进级别 –

+0

哪一行? – Bijoy

+0

如果我把, 如果不是name.startswith('_'): 前行“文件名= os.path.join(路径,名称)”,那么我越来越, 文件“learn.py”,第47行 filename = os.path.join(路径,名称) ^ IndentationError:预计有一个缩进块 –

1

看着你挂码,category来自

category = name.split("_")[0] 

name来自:

for path, subdirs, files in os.walk(root): 
    for name in files: 

所以我猜测,你有一个前导下划线的文件名。将此字符串拆分为'_',这将为列表的第一个值提供一个空字符串。示例:

s = '_abc_test.txt' 
s.split('_') 
# returns: 
['', 'abc', 'test.txt'] 

这是第零个元素,它是传递到ord的空字符串。

+0

你说得对。你能帮我吗?我应该在代码中进行更改以使其工作?我的示例文件名是“a_sample_0_1”,它继续串联。 –

相关问题