【问题标题】:Sublime tries to compile Python-script as a Haskell-script [duplicate]Sublime 尝试将 Python 脚本编译为 Haskell 脚本 [重复]
【发布时间】:2014-03-12 05:09:55
【问题描述】:

我是新手,请不要对我苛刻。

我正在尝试使用 Python 设置 Sublime Text(下学期)。在此之前,我在 SublimeText 中使用 Haskell,我可以在 Sublime 中使用“ctrl+b”运行我的脚本。

当我尝试对名为“test.py”的文件执行相同操作时。

  def add(a,b):

      return a+b

  main = print(add(2,3))

我收到错误消息:

/home/nayooti/Desktop/test.py:1:1:
    **Parse error: naked expression at top level**
[Finished in 0.2s with exit code 1]
[shell_cmd: runhaskell "/home/nayooti/Desktop/test.py"]
[dir: /home/nayooti/Desktop]
[path: /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games]

“顶层的裸表达式”部分看起来很熟悉,因为它是 Haskell 特有的。事实上,当我在网上搜索该消息时,它只会让我想到与 Haskell 相关的东西。所以显然 Sublime 或编译器认为,我正在尝试运行 Haskell 脚本,即使我将文件命名为 ~.py 。

对于那些不熟悉 Haskell 和 Python 的人: 您通常可以通过以下方式运行脚本: Python:主 = 打印(方法(x,y)) Haskell: main = print(function x y)

我使用的是 Ubuntu 12.04。我在这里做错了什么?非常感谢帮助。发送。

【问题讨论】:

  • 德克萨斯州。我去过那里,但不是。我知道 Ctrl+B,当我使用它时,我会收到上面发布的错误消息。
  • 你设置构建系统了吗?
  • 如前所述,我是新手,我不确定“设置构建系统”是什么意思。我猜Ubuntu带有Python,我可以通过控制台执行。我没有在 Sublime 中设置任何路径,以防这是您的问题。

标签: python haskell sublimetext


【解决方案1】:

转到Tools -> Build System 并确保选择Python。另外,这不是您在 Python 中编写 main 的方式,它应该更像

def add(a, b):
    return a + b

def main():
    print(add(2, 3))

if __name__ == '__main__':
    main()

当你写作时

main = print(add(2, 3))

然后加载你的脚本,那一行会被执行,因为它是一个赋值,如果我这样做了,就差不多了

a = 1

或者

a = print(add(2, 3))

在 Python 中,main 这个名字没有什么特别之处。您仍然可以看到您的输出,因为 print 有副作用,但不是定义 main 您只是在执行一个脚本。如果您要尝试,差异就会出现

add.py:

def add(a, b):
    return a + b

main = print(add(2, 3))

subtract.py:

from add import add

def subtract(a, b):
    return add(a, -b)

如果您运行python subtract.py,您仍然会看到5 打印到屏幕上,即使subtract.py 中没有定义main。显然,这不是所希望的行为,如果您没有将 add.py 中的 main 函数作为主脚本运行,则不应执行它。当您以python scriptname.py 直接运行Python 脚本时,该文件有一个全局变量集__name__,它被分配了字符串"__main__"。如果您导入它,那么__name__ 将设置为其限定模块名称,类似于"scriptname"。如果文件被执行,与文件被另一个脚本导入时相比,这使您能够定义不同的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-19
    • 2011-05-31
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多