split()错误:列表索引超出范围

时间:2015-06-10 07:26:41

标签: python string split

<Button
       Command="{x:Static DataGrid.SelectAllCommand}"
       Focusable="false"
       Style="{DynamicResource {ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}}"
       Visibility="{Binding Path=HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.All}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
       Width="{Binding Path=CellsPanelHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />

每当我的程序运行时,都会出错。我不知道为什么。但每当我检查日期时间变量时,它包含这个['2013/12/10','19:48:25]这是正确的。但我无法使用datetime [1]访问第二个元素,它给出了索引超出范围的错误,但我可以访问datetime [0]。谁能告诉我我做错了什么?请帮忙,我很困惑,没有耐心。谢谢!

编辑:所以这是真正的代码

line = "2013/12/10@19:48:25"
datetime = line.split('@')
print datetime[1]
到目前为止,这就是我正在做的事情。在我弄清楚代码中的错误是什么错误之后,这就是为什么该程序现在看起来毫无意义。

2 个答案:

答案 0 :(得分:0)

代码本身似乎是正确的,但您可以添加几个assert以确保一切都按预期进行。

line = "2013/12/10@19:48:25"
assert "@" in line          # check that "@" is present there
datetime = line.split('@')
assert len(datetime) == 2   # check that there are 2 elements
print datetime[1]           # then it's safe to take the second element

顺便说一下,使用不同的名称代替datetime是合理的,以避免因隐藏日期时间模块名称而导致的潜在问题。

答案 1 :(得分:0)

对于那些仍然在寻找答案的人或因为我收到错误而感到奇怪的人,这是因为日志文件的文件格式是UNIX文本文件格式。因此,在解析时,python解析器将与一些隐藏的特殊字符混淆。我在linux中使用'unix2dos'命令将日志文件从unix转换为dos后解决了这个问题。在此之后,我的解析器工作顺利。