带有lIs字符串值的布尔表达式出现问题

2024-10-03 15:35:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下问题:

  # line is a line from a file that contains ["baa","beee","0"]
  line = TcsLine.split(",")
  NumPFCs = eval(line[2])
  if NumPFCs==0:
     print line

如果列表的第二个位置的值==0,我想打印文件中的所有行。在

我打印了这些行,但之后发生了以下情况: 回溯(最近一次呼叫):

['baaa','beee','0','\n']

但在我遇到下一个错误之后

^{pr2}$

你能帮帮我吗? 谢谢

什么


Tags: from列表ifthatisevallinefile
3条回答

你的问题有点难读,但用eval肯定不是个好主意。或者直接进行字符串比较:

line=TcsLine.split(",")
if line[2] == "0":
    print line

或者使用int

^{pr2}$

不管怎样,你的坏数据都会让你失望。在

我也会重新阅读PEP 8。在

让我解释一下你在这里做什么。在

如果你写:

NumPFCs = eval(line[2])

评估的顺序是:

  • 取字符串行的第二个字符,即引号'''
  • 将此引号作为python表达式求值,这是一个错误。在

如果您将其改为:

^{pr2}$

那么评估的顺序是:

  • 计算行,生成一个python列表
  • 以该列表的第二个元素为例,它是一个单字符字符串:“0”
  • 字符串不能与数字进行比较;这也是一个错误。在

在您的术语中,您希望执行以下操作:

NumPFCs = eval(eval(line)[2])

或者,稍微好一点,将numpfc与字符串进行比较:

if NumPFCs == "0":

但这可能会出问题的方式几乎数不清。您应该忘掉eval,尝试使用其他方法:字符串拆分、正则表达式等。其他人已经提供了一些建议,我相信接下来还会有更多的建议。在

我在您的代码段中看到了一些问题:

  1. 假设列表总是至少有3个元素
  2. 如果包含的字符串不是有效的python,eval将引发异常
  3. 你说你想要第二个元素,但是你访问了第三个元素。在

这样做比较安全

line=TcsLine.split(",")
if len(line) >=3 and line[2].rfind("0") != -1:
     print line

相关问题 更多 >