【问题标题】:Invalid Token. Not accepting integers that start with 0令牌无效。不接受以 0 开头的整数
【发布时间】:2017-12-04 17:22:15
【问题描述】:

所以我正在尝试创建校验位功能,但令人尴尬的是,我很早就遇到了一个我一直在尝试寻找问题的障碍,但我遇到的大多数解释不幸的是超出了我的理解。我希望有人可以具体说明我现在的问题是什么

mam = []

def check_digit():
    a = int(input("Please enter your 10 digit book number"))
    b = str(a)
    for c in b:
        mam.append(c)
        print(c)

check_digit()

很抱歉没有为变量设置名称,我更喜欢以这种方式编码,即使它最终会让其他人难以阅读。无论如何,每次我写一个以 0 开头的整数时,都会出现语法错误“无效令牌”,我不知道如何解决它。有人可以帮我吗?不胜感激

已修复。我真的需要更新 Python,我目前正在运行 2.7。

raw_input 解决了这个问题

【问题讨论】:

  • b 不会被定义。它是 check_digit() 函数的本地函数
  • 也许你的缩进是错误的? for 循环应该属于 check_digit 函数。
  • 对不起,我把它复制到堆栈溢出时出错了。现在已经修好了。
  • 你能发布整个错误回溯吗?所以我们可以看到错误发生在哪一行。
  • 随心所欲地编写代码,但如果您要让其他人阅读您的代码并帮助您,使用更具描述性的变量名称会很有礼貌。在这种情况下,这并不重要,但如果你现在改掉这个习惯,从长远来看,你会更快乐。

标签: python syntax-error check-digit


【解决方案1】:

您将 a 转换为 int,但从不将其用作 int。尝试直接循环输入字符串。

mam = []

def check_digit():
    a = raw_input("Please enter your 10 digit book number")
    for c in a:
        mam.append(c)
        print(c)

check_digit()

其他答案对问题根源的解释对我来说很有意义。这应该可以解决问题,因为您根本不需要将输入解释为整数。

【讨论】:

  • @PearseTraynor 我的错误,在 python2.7 中你应该使用raw_input。这将导致解释器在所有情况下都将输入作为字符串,而不是 input,它试图推断输入类型。我已经编辑了答案。
【解决方案2】:

在 python 中,以0 开头的数字以八进制为基数,您得到的“无效令牌”错误必须在大于 7 的数字上,这在以 8 为基数的数字中是非法的。尝试使用raw_input() 而不是input(),这样该值就不会被计算为数字。

【讨论】:

  • 代码可以工作,如果我输入09,不会抛出异常。
  • @MikeScotty 不正确,09 作为输入失败,并出现相同的错误“无效令牌”(python 2.7)
  • 好吧,它在 Python 3.4 上不会失败,OP 从未指定 python 版本,但它可能是 2.7
  • Py2 上的 raw_input() 与 Py3 上的 input() 相同。
【解决方案3】:

这解决了 strint 的问题:

mam = []

def check_digit():
    a = str(input("Please enter your 10 digit book number: "))
    [mam.append(int(inputted)) for inputted in a]
    print(mam)

check_digit()
print(mam[0] + mam[1])
print(type(mam[0]))

输入:

Please enter your 10 digit book number: 0123456789

输出:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
1
<class 'int'>

【讨论】:

    【解决方案4】:

    在 Python 中,非十进制数字以“0”开头。十进制数不能以“0”开头。旧式八进制数过去以“0”开头,因此在 Python 2 中“010”将是 8。十六进制数以“0x”开头,在 Python 3 中仍然如此。在 Python 3 中,八进制数现在以“0o”开头'。 您正在抛出错误,因为您正在输入一个字符串,然后在其上运行 int() 。不要那样做。您可以检查输入的字符串是否全是数字,并确保它的长度正确。 或者,如果您一心想检查是否将 int 转换为小数,则应在转换前用 value.lstrip('0') 去掉前导零。

    或者,您可以只输入妈妈,然后检查if mam.isdigit():... .isdigit() 方法检查字符串是否仅由数字组成。这应该是您正在寻找的。​​p>

    【讨论】:

    • 所以使用 type() 和 len() 而不是列表?是这个意思吗?
    • @PearseTraynor - acctnum = input(...; if acctnum.isdigit(): do it
    • @PearseTraynor - 我想说 len() 和 .isdigit() 的组合应该做得很好。 :)
    猜你喜欢
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多