【问题标题】:Syntax Error while using parse使用解析时出现语法错误
【发布时间】:2018-12-31 07:22:33
【问题描述】:

我的函数名称是 getTile.py。我正在尝试使用 python 中的 argparse 函数来解析命令行中的内容。但是,该程序无法通过我脚本的第二行。它不断在命令行中返回:

./getTile.py: line 19: syntax error near unexpected token `('
./getTile.py: line 19: `parser = argparse.ArgumentParser()

我正在关注 python.org 上的 argparse 温和教程。另外,这是我的程序。

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("X-coordinate", help="Please put in the X-coordinate of your point.", type=float)
xCoordinate=float(parser.X-coordinate)
def aFunction(var1):
    var1 = var1+5
    print(a)
afunction(xCoordinate)

【问题讨论】:

  • 无法重现,请添加重现您的错误所需的代码minimal reproducible example
  • 你确定你在运行 Python 吗?因为这看起来更像是 bash 可能生成的错误消息。在这之前你能成功运行 Python 程序吗?
  • 我已经添加了代码-cheeerrrs
  • 你错过了args = parser.parse_args()。但是还有更多的问题。您不能在 python 中的变量名中使用破折号。这将被解释为减号。您可以使用getattr 解决此问题。像这样:xCoordinate = float(getattr(args, 'X-coordinate'))
  • 谢谢你,但这仍然没有解决问题...:(

标签: python python-3.x command-line argparse


【解决方案1】:

这行得通:

In [42]: import argparse
    ...: parser = argparse.ArgumentParser()
    ...: parser.add_argument("X_coordinate", help="Please put in the X-coordinate of your point.", type=float)
    ...: args = parser.parse_args('1.23'.split()) # simulate commandline
    ...: print(args)
    ...: xCoordinate=args.X_coordinate   # type already converted it to float
    ...: def aFunction(var1):
    ...:     var1 = var1+5
    ...:     print(a)
    ...: aFunction(xCoordinate)
    ...: 
    ...: 
Namespace(X_coordinate=1.23)
3.141592653589793

对于像X-coordinate 这样的目标,您必须使用getattr,因为这不是有效的变量名。但是对于定位,您不需要使用花哨的dest。一个简单的字符串也一样好。 (对于可选的,像'--X-coordinate'这样的标志是可以的。)

我还删除了不必要的float

在测试期间,我喜欢使用print(args) 来清楚地了解解析器在做什么。

语法错误无法从您的代码中重现。

【讨论】:

    【解决方案2】:

    文件当前正在作为 shell 脚本执行,导致错误。

    试试:

    python ./getTile.py
    

    或将其添加到标题(getTile.py 中的第一行):

    #!/bin/env python
    

    添加添加执行权限:

    chmod u+x getTile.py
    

    那就试试吧:

    ./getTile.py
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多