python中函数定义的语法错误,该函数似乎有效

python中函数定义的语法错误,该函数似乎有效,python,sh,Python,Sh,当我在此代码中定义函数时: def is_palindrome(seq): s=seq[::-1] if s==seq: return True else: return False myfile=open('palindrome.txt','r') for line in myfile: if is_palindrome(line.srtrip()): print(line,end='') myfile.cl

当我在此代码中定义函数时:

def is_palindrome(seq):
    s=seq[::-1]
    if s==seq:
         return True
    else:
         return False

myfile=open('palindrome.txt','r')
for line in myfile:
    if is_palindrome(line.srtrip()):
        print(line,end='')
myfile.close()
它在我的控制台中返回此错误消息:

./palindrome.py: line 1: syntax error near unexpected token `('
./palindrome.py: line 1: `def is_palindrome(seq):'
我不知道这里出了什么问题。

缩进

def is_palindrome(seq):
    s=seq[::-1]
    if s==seq:
        return True
   else:
        return False

您正在以*sh脚本的形式执行脚本。您应该执行
python palindrome.py

实际上,您收到的错误消息通常是*sh script。。。当您通过
/palindrome.py
调用脚本时,它将使用匹配的第一个解释器执行脚本。这里似乎是一个*sh解释器,来自您的Linux环境

为了避免这种情况,最好的方法是添加
#/usr/bin/env python
位于python脚本的第一行,这将强制命令行使用python解释器而不是*sh解释器


注:*这里的sh代表sh的任何派生词:bash、zsh等。

是的,我的代码是这样的,对不起,我第一次写主题时,我不知道如何设置段落的格式:)您发布的代码是错误的,您试图告诉的内容不是很清楚。可能是因为作者第一次忘记将代码放入“代码块”中。对这类问题要小心,这是很常见的。或者加上
#/usr/bin/env python
作为第一行。这将告诉shell使用哪个解释器。注意
env
版本是首选的,因为它可以与多个Python版本、virtualenv等一起使用。如果您以解释器的方式将文件传递给Python,则不需要
/
,使用./是正确的做法。否则,如果它们共享相同的名称,则可能会意外运行系统命令。考虑一个名为“test”的脚本。code>/test会做正确的事情,而
test
不会。另外,“.”并不总是在用户的
路径上
@seanpery:实际上,我相信他指的是
python./test
vs
python test
的形式。在这种情况下,您不需要
/
,因为shell根本不会尝试直接执行
测试
,它将作为一个参数传递给Python。我绝对建议使用hashbang。这样,用户可以选择是使用
/
还是使用
python
调用。