ValueError:分析字符串中的数字时,以10为基数的int()的文本无效:“x”

2024-09-28 05:19:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个相当初级的程序员,我正在做我的一个项目,虽然我遇到了麻烦,我已经在网上寻找任何有帮助的东西,但我似乎做不到。我正在尝试创建一个程序来解代数方程,我已经成功地将整个字符串分成两个列表,然后我可以将这些列表连接在一起,但它只打印为字符串,我不能将其打印为浮点或整数。在

import re
group1 = []
group2 = []
subjects = []
question = input("What is the question?")
questions = list(question)

for i in range(len(questions)):
    if questions[i] == "=":
        for a in range(i):
            group1.append(questions[a])
        print(group1)
        a = a + 2
        for b in range(a,len(questions)):
            group2.append(questions[b])
        print(group2)

for i in range(len(group1)):
    if re.match("[a-z]", str(group1[i])):
        subjects.append(group1[i])
print(subjects)

for i in range(len(group2)):
    if re.match("[a-z]", str(group2[i])):
        subjects.append(group2[i])

pair1 = ''.join(group1)
pair2 = ''.join(group2)
print(int(pair1))
print(pair2)

(这当然还没完)

当它试图print (int(pair1))时,我得到以下错误:

ValueError: invalid literal for int() with base 10: '5+6'

我需要帮助来克服这个问题。在


Tags: inreforlenifrangeintquestions
2条回答

首先尝试拆分对,对每个单独的数字调用int(),而不是对整个表达式调用。例如,如果pair1是字符串"5+4",请执行以下操作:

first_num_str,second_num_str = pair1.split("+") 
first_num = int(first_num_str)
second_num = int(second_num_str)
result = first_num + second_num
print(str(result))

当然,必须更改“-”、“*”或其他算术运算符的split()表达式,如果数字不是整数,则使用float()。在

When it tries to print (int(pair1)), I get this error : ValueError: invalid literal for int() with base 10: '5+6'.

字符串'5+6'不是有效的数字。这很容易复制。例如:

>>> int('5+6')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '5+6'

您需要将字符串拆分为单独的数字(即56),然后然后将它们相加。请考虑以下内容:

^{pr2}$

上面的代码使用列表理解,基本等同于下面的代码:

>>> strlist = '5+6'.split('+')
>>> intlist = []
>>> for i in strlist:
...     intlist.append(int(i))
...
>>> sum(intlist)
11
>>> # just displaying lists for you
>>> strlist
['5', '6']
>>> intlist
[5, 6]

上面我使用的列表理解大约用了2行代码来实现;下面的代码更紧凑、更优雅、更像Python:

>>> sum(int(i) for i in '5+6'.split('+'))
11

安全性:为什么不应该滥用eval和{}

evalexec函数很强大,但是这种能力带来了危险,因为它更容易把事情搞砸。(一切都是权衡的。)

因此,虽然编写eval('2+2')可能看起来很诱人,但是您应该考虑它的安全含义,如果您不确定或者没有一个知识更丰富的人/团队来审阅代码(如果这是为了生产而设计的话),那么您应该考虑它的安全性,并避免使用它。在

主要的问题是eval不仅会执行任意的数学表达式,而且实际上会试图执行任何在被验证并被认为是安全的之前发送给它的任何。在

例如,假设您要求用户输入一个要计算的表达式,从用户的PoV来看,如下所示:

Enter a mathematical expression: 2+5+7+1
15

它起作用了!但软件开发的规则1是:你永远不相信用户的输入

如果您将代码放在服务器/页面中,它看起来像这样:

>>> eval(input('Enter a mathematical expression: '))

猜猜当我作为一个用户输入以下输入时会发生什么?在

>>> Enter a mathematical expression: print([int(i) for i in '2+5+7+1'.split('+')])

事实上,结果将是:

>>> [2, 5, 7, 1]

你的“简单”和“无辜”的应用程序现在被用来在你的系统中执行任意代码。在

我不是说你永远不要用这些。我要说的是,在你做之前你需要知道你在做什么。在

考虑其他的SO帖子:

相关问题 更多 >

    热门问题