【问题标题】:invalid literal for int() with base 10 Python具有基数 10 Python 的 int() 的无效文字
【发布时间】:2017-03-31 18:12:41
【问题描述】:

上面出现错误,代码如下:

import optparse
import socket
from socket import *
from threading import *


def main():
    parser =optparse.OptionParser('usage%prog -H <target host> -p <target port>')
    parser.add_option('-p',dest='tgtPort',type='string',help='specific target port separated by comma')
    (options, args) = parser.parse_args()

    tgtPorts = str(options.tgtPort).split(', ')
    for p in tgtPorts:
        print int(p)


if  __name__ == '__main__':
    main()

当我尝试实施时:

python testInt.py -p 20, 80

预期结果:

20 80 

【问题讨论】:

  • 只是在您的论点的帮助文本中说separated by comma 并不会使argparse 实际上以您想要的方式处理逗号分隔的论点。哎呀,即使在参数到达argparse 之前,shell 的命令行拆分也无法按照您想要的方式工作。 tgtPort"20,""80" 最终成为 args 的一个元素。
  • (哦,optparse,不是 argparse。不过,optparse 和 shell 的命令行拆分都不会做你想做的事情。)
  • argparse 提供了一些可以提供帮助的工具,特别是如果您不想引用您的论点,但逗号分隔的论点处理会很尴尬。外壳是围绕空间分隔设计的。
  • @user2357112 非常感谢您的可靠解释。现在我对此有了更好的理解。
  • @user2357112 我正在做一个工具,我从一本书中学到了它,它做同样的事情但它有效,lmao。我想知道为什么它对我不起作用并试图抓住它。好的,还是谢谢/

标签: python int base


【解决方案1】:

嗯,当你打电话时

python testInt.py -p 20, 80

20, 被传递给 -p 参数,80 包含在其余参数中。

您需要将它们括在引号中才能正常工作

python testInt.py -p "20, 80"

【讨论】:

  • @Enderphan:有人告诉你需要使用一个东西,你的第一个问题是如何摆脱他们说你需要使用的东西?
  • @user2357112 先生,我想了解更多。如果您能提供帮助,我将不胜感激。
  • @Enderphan ,它由您使用的外壳处理。本质上,您的 shell 将在空格上拆分字符串(例如命令)以创建稍后将尝试解释的标记,除非在特定情况下,例如使用双引号时。在这种情况下,它会将引号内的任何内容视为一个标记并删除引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 1970-01-01
  • 2013-05-31
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多