Python:ValueError:int()的文本无效,以10为底:'';错误
我有一个代码,可以从文件中读取信息(线描述点、多边形、线和圆),并将其解析为相应的类。点有x和7个坐标,线有起点和终点 我有一个列表(Python:ValueError:int()的文本无效,以10为底:'';错误,python,list,int,Python,List,Int,我有一个代码,可以从文件中读取信息(线描述点、多边形、线和圆),并将其解析为相应的类。点有x和7个坐标,线有起点和终点 我有一个列表(line=['L1','L((1,1),(1,2)),“#comment']),我试着把它排成一行。问题在于创建端点时,执行时出现以下错误ValueError:invalid literal for int(),以10为基数:“”fr变量x2 有什么问题 代码: 您的错误消息表示您正在尝试将空字符串转换为int。在转换之前,请仔细检查所有数据以验证这一点 毫无疑问
line=['L1','L((1,1),(1,2)),“#comment']
),我试着把它排成一行。问题在于创建端点时,执行时出现以下错误ValueError:invalid literal for int(),以10为基数:“”
fr变量x2
有什么问题
代码:
您的错误消息表示您正在尝试将空字符串转换为int。在转换之前,请仔细检查所有数据以验证这一点 毫无疑问,如果数据正确,转换为整数将起作用。因此,唯一的结论是你的数据不正确。你在对你的问题的评论中声称数据是好的,但这根本不可能是真的
请相信python解释器而不是您自己的假设。您的错误消息说您正在尝试将空字符串转换为int。在转换之前,请立即仔细检查所有数据以验证这一点 毫无疑问,如果数据正确,转换为整数将起作用。因此,唯一的结论是你的数据不正确。你在对你的问题的评论中声称数据是好的,但这根本不可能是真的
相信python解释器而不是你自己的假设。错误表明你的代码有问题,但事实上它运行正确。 如果您遇到错误,那么找到错误出现的行是值得的,并使用
print
打印它们的值,以确保您将正确的值传递给正确的方法
处理这种(乍一看)有趣格式的一个简单方法是使用python的eval()
函数。你会注意到列表的第二部分看起来很像一组两组,事实上是这样的
如果执行此操作,将得到一个很好的设置对象:
eval("((1,1), (1,2))")
# equivalent to this:
eval(line[1][1:],{}) # passing an empty dict as the 2nd argument makes eval a (bit) safer
但这只是一种快速而肮脏的方法,不应该在生产代码中使用。错误表明代码有问题,但实际上它运行正确。 如果您遇到错误,那么找到错误出现的行是值得的,并使用
print
打印它们的值,以确保您将正确的值传递给正确的方法
处理这种(乍一看)有趣格式的一个简单方法是使用python的eval()
函数。你会注意到列表的第二部分看起来很像一组两组,事实上是这样的
如果执行此操作,将得到一个很好的设置对象:
eval("((1,1), (1,2))")
# equivalent to this:
eval(line[1][1:],{}) # passing an empty dict as the 2nd argument makes eval a (bit) safer
但这只是一种快速而肮脏的方法,不应该在生产代码中使用。我删除了您没有提供足够信息的部分,我仍然没有收到相同的错误
def make_line(line):
name = line[0]
point = line[1].split(", ")
p = point[0].split(",")
x1 = int(p[0][3:])
y1 = int(p[1][:-1])
p = point[1].split(",")
x2 = int(p[0][1:])
y2 = int(p[1][:-2])
return x1, y1, x2, y2
>>> make_line(['L1','L((1,2), (1,1))','# comment'])
(1, 2, 1, 1)
我删除了你没有提供足够信息的部分,我仍然没有得到相同的错误
def make_line(line):
name = line[0]
point = line[1].split(", ")
p = point[0].split(",")
x1 = int(p[0][3:])
y1 = int(p[1][:-1])
p = point[1].split(",")
x2 = int(p[0][1:])
y2 = int(p[1][:-2])
return x1, y1, x2, y2
>>> make_line(['L1','L((1,2), (1,1))','# comment'])
(1, 2, 1, 1)
尝试打印出
p[0][1::
,看看它是否是您所认为的。我的客人是,你会惊讶的。这些是标准图书馆的一部分吗?我可以从哪个模块获得点
和线
?相反!它会打印出1
,但当抛出int()
时,就会出现错误@凯利先生,这些都是自己写的类你的输入中有一些大写字母L
s-有可能是小写字母L
爬进去了吗,这就是您所看到的数字1
?当我删除创建点
和线
对象的不相关行时,您的代码与示例输入一起工作x2
被赋值为1。请尝试打印出p[0][1://code>以查看它是否是您认为的值。我的客人是,你会惊讶的。这些是标准图书馆的一部分吗?我可以从哪个模块获得点
和线
?相反!它会打印出1
,但当抛出int()
时,就会出现错误@凯利先生,这些都是自己写的类你的输入中有一些大写字母L
s-有可能是小写字母L
爬进去了吗,这就是您所看到的数字1
?当我删除创建点
和线
对象的不相关行时,您的代码与示例输入一起工作x2
的值为1。发布的代码实际上给出了正确的结果,因此您的答案肯定是错误的。为解析推荐eval
是一个可怕的建议。我知道eval()
不是一个好的做法,但我演示了一种快速简便的方法。你说得对,我应该把它的缺点说清楚。更新了帖子。发布的代码实际上给出了正确的结果,所以你的答案一定是错的。为解析推荐eval
是一个可怕的建议。我知道eval()
不是一个好的做法,但我演示了一种快速简便的方法。你说得对,我应该把它的缺点说清楚。更新了POST,重新检查了所有内容,但没有发现错误,因此我继续测试代码,但避免了出现错误的功能。输入函数的行是从文件中读取的。在某个时候,我把这一行放在文件的末尾,而不是中间,这样东西就可以工作了。“神奇的神秘漏洞修复”我重新检查了所有的东西,但没有发现错误,所以我继续测试我的代码,但避免了错误的功能。输入函数的行是从文件中读取的。在某个时候,我把这一行放在文件的末尾,而不是中间,这样东西就可以工作了。“神奇神秘虫修复”就在那里