【问题标题】:Python function throwing invalid syntax errorPython函数抛出无效语法错误
【发布时间】:2016-03-21 23:34:32
【问题描述】:

我有一个功能可以解开一些光谱仪数据,在这里非常简洁地复制:

def loader(filename): 
     global lister
     lister = pd.read_pickle(str(filename) + ".pkl")

该功能可以按我的意愿工作,只是我宁愿只是制表符/完成文件名,而不必在文件扩展名上退格。我不确定为什么我不能将文件名(20160321.pkl)扔到函数本身中。我可以制作显示为“20160321.pkl”的字符串,但为什么我不能制作包含扩展名的制表符完成文件名的字符串,如下所示?

    def loader(filename): 
         global lister
         lister = pd.read_pickle(str(filename))

我确信有一个我还没有学会的简单原因。

【问题讨论】:

  • 函数怎么调用?
  • 通常在解释器中: loader(20160321) 可以工作,因为我稍后会添加 .pkl。 loader(20160321.pkl) 不工作
  • 我不确定我是否理解这个问题 - 你是用loader("20160321") 来称呼它吗?您的问题是如何自动计算/组合文件名而无需自己传递日期字符串?
  • 不完全。将该函数定义为我的第一个代码块,我调用loader(20160321) 并且一切正常。我宁愿打电话给loader(20160321.pkl),就像在第二个代码块中一样;但是,这会引发语法错误。
  • 啊,我明白了发生了什么 - 我已经阐明了如何在答案中传递您想要的文件名。

标签: python-2.7 pickle


【解决方案1】:

当您调用 loader(20160321) 时,您实际上是在传递一个整数 (20160321),而不是一个字符串。这就是第一种方法有效的原因,因为str(filename) 将该整数转换为字符串,然后在末尾添加".pkl"

当您调用loader(20160321.pkl) 时,您会遇到语法错误,因为数字中可以有小数点,但后面不能有字符(因此允许使用3.5,但不允许使用3.abc)。

如果你想用扩展名调用它,那么你需要传入一个字符串:loader("20160321.pkl")。您也可以使用单引号 (loader('20160321.pkl')),但无论如何您都希望传入一个字符串。

【讨论】:

  • 我想它会这么简单。我希望节省一些击键,但看起来任何一种方式都是等效的。谢谢;我会接受你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多