【问题标题】:Syntax error on the definition of a function in python which seems validpython中函数定义的语法错误似乎有效
【发布时间】:2013-12-29 23:56:04
【问题描述】:

当我在这段代码中定义一个函数时:

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):'

我不知道这里出了什么问题。

【问题讨论】:

    标签: python sh


    【解决方案1】:

    缩进?

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

    【讨论】:

    • 是的,我的代码是这样的,对不起,我第一次写主题,我不知道如何格式化段落:)
    • 您发布的代码是错误的,您要说的不是很清楚。
    • 可能是因为作者第一次忘记把代码放在“代码块”里。这类问题要小心,这很常见。
    【解决方案2】:

    您将脚本作为 *sh 脚本执行。你应该这样做python palindrome.py

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

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

    注意:这里的 *sh 代表 sh 的任何衍生物:bash、zsh 等。

    【讨论】:

    • 或者添加#!/usr/bin/env python作为第一行。这将告诉 shell 使用哪个解释器。请注意,env 版本是首选,因为它适用于多个 Python 版本、virtualenv 等。
    • 如果将文件传递给 python 解释器,则不需要./
    • 实际上,使用 ./ 是正确的做法。否则,如果它们共享相同的名称,它可能会意外运行系统命令。考虑一个名为“测试”的脚本。 ./test 会做正确的事,而 test 不会。另外,“。”并不总是在用户的PATH 上。
    • @SeanPerry:实际上,我相信他指的是python ./testpython test 的形式。在这种情况下,您不需要./,因为shell 根本不会尝试直接执行test,它只会作为参数传递给Python。
    • 我绝对推荐使用 hashbang。这样用户就可以选择是使用./还是使用python调用。
    猜你喜欢
    • 2012-06-18
    • 2018-06-15
    • 2014-09-13
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多