【问题标题】:syntax error i've never seen before我从未见过的语法错误
【发布时间】:2013-04-16 19:41:26
【问题描述】:

我正在用 python 编写一个系统发育树程序,我遇到了一个我以前没有遇到过的小问题,我已经研究过了,没有什么能完全描述我遇到的问题,我从中得到一个语法错误代码:

 for x in range(len(matrix)):
            # Print the label
            print(seq0[x-1], end == ' ') if x > 0 else print( ' ', end == '')

错误提示:

 File "/home/brandon/OptimalAlignmentSensitive.py", line 206
print(seq0[x-1], end == ' ') if x > 0 else print( ' ', end == '')

它指向第二个打印语句中的't'。有没有其他人有这个问题?我不明白该怎么做我尝试添加空格等,但没有任何帮助。

【问题讨论】:

  • 像这样滥用三元表达式是个坏主意,请使用普通的if 语句。按索引循环也是一个非常糟糕的主意。
  • seq0[x-1] 是否始终存在? (也适用于x = 0x-1 = -1
  • @TVproductions 查看正在执行的测试,该代码仅在x > 0 时才会执行。
  • 在我看来,您的 if 语句格式不正确。试试:pych.atomidata.com/code
  • 顺便说一句,这在 Python 3 中有效,在 Python 2 中无效。我假设代码检查器仅适用于 Python 2 代码,因为它标记了错误。这是因为在 Python 3 中,print 是一个函数。

标签: python syntax


【解决方案1】:

尝试添加from __future__ import print_function,并在print 函数中使用单个“=”编写print(' ', end='')

【讨论】:

  • end == ''有什么问题?如果end 没有在那里定义,也许Name Error,但为什么Syntax Error
  • @MostafaR 因为命名参数是用单个= 给出的。那是语言的语法,因此是错误的。 end这里不需要定义,是参数名,不是变量。
  • @Lattyware 可以,但是如果用==写会是条件语句,所以如果定义了end就应该是False或者True,否则会导致NameError: name 'end' is not defined.
  • @MostafaR 你是完全正确的。他必须运行 2.x,因此得到错误,因为 print 是一个语句 - 而三元运算符只接受表达式。
【解决方案2】:

您的问题是使用三元运算符。您使用的是 2.x,其中 print 是一个语句 - 而三元运算符只接受表达式。将其替换为 if 语句:

 for x in xrange(len(matrix)):
     if x > 0:
         print(seq0[x-1], end == ' ')
     else:
         print(' ', end == '')

这可能不会做你想要的。这将打印一个tuple,而您可能想使用来自3.x 的print() 函数的关键字参数。这在 2.x 中不存在,而是通过留下一个尾随逗号(不带括号来构造元组)来产生该功能。

 for x in range(len(matrix)):
     if x > 0:
         print seq0[x-1], 
     else:
         print " ",

一般来说,使用三元运算符来模拟单行 if 语句无论如何都是不好的做法,即使它确实有效。正如我的 cmets 中所述,按索引迭代通常不是一个好主意,并且可能会被删除,但这需要更深入地了解手头的操作。

【讨论】:

    猜你喜欢
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    相关资源
    最近更新 更多