Python异常 ValueError的问题详解
Posted LinuxProbe19
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python异常 ValueError的问题详解相关的知识,希望对你有一定的参考价值。
导读 | 这篇文章主要介绍了Python异常 ValueError的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教 |
ValueError: invalid literal for int() with base 10: \'*\'
试图将一个与数字无关的类型转化为整数,会抛出该异常。
>>> int("99 years ago.") Traceback (most recent call last): File "", line 1, in ValueError: invalid literal for int() with base 10: \'99 years ago.\'
规避方法:int函数参数应该合法使用。int函数使用传送门:Python中的int函数使用
ValueError: too many values to unpack (expected 2)
试图遍历字典时同时遍历键和值。
>>> demo = "China": "Beijing", "Japan": "Tokyo" >>> for k, v in demo: ... print(k, v) ... Traceback (most recent call last): File "", line 1, in ValueError: too many values to unpack (expected 2)
Python只允许对字典key的遍历,因此上面的遍历方式是错误的。
方法一:使用dict[key]的方式同时获取value
>>> demo = "China": "Beijing", "Japan": "Tokyo" >>> for key in demo: ... print(key, demo[key]) ... China Beijing Japan Tokyo
方法二:使用items方法
>>> demo = "China": "Beijing", "Japan": "Tokyo", "the United States": "Washington D.C." >>> for key, value in demo.items(): ... print(key, value) ... China Beijing Japan Tokyo the United States Washington D.C. ValueError: binary mode doesn\'t take an encoding argument
试图以二进制模式读取文件时指定编码方式。www.linuxprobe.com
>>> with open("protoc-gen-go", "rb+", encoding="utf-8") as file: ... data = file.read() ... Traceback (most recent call last): File "", line 1, in ValueError: binary mode doesn\'t take an encoding argument
>>> with open("protoc-gen-go", "rb+") as file: ... data = file.read(10) ... >>> data b\'\\xcf\\xfa\\xed\\xfe\\x07\\x00\\x00\\x01\\x03\\x00\'
Python CodeLab 关于异常的问题——尝试,除了 ValueError
【中文标题】Python CodeLab 关于异常的问题——尝试,除了 ValueError【英文标题】:Python CodeLab Question About Exceptions -- Try, Except ValueError 【发布时间】:2020-08-02 02:44:29 【问题描述】:问题:
“三个变量——x、y 和 z——应该包含数字字符串,适合转换为整数。编写将这些变量转换为整数的代码并打印这三个整数的和。但是,如果任何变量有值不能转换为整数的,打印出字符串“bad value(s) in:”,后跟具有错误值的变量的名称(以空格分隔,按字母升序排列)。
例如,如果 x、y 和 z 的值分别为“3”、“9”和“2”,则将打印数字 14。另一方面,如果值是“abc”、“15”和“boo”,那么输出将是:bad value(s) in: x z。
注意:这个问题来自图灵的Craft CodeLab,它似乎需要特定的标准输入才能得到正确的答案。我包含了 CodeLab 在每次尝试后提供给我的“错误分析”,让您了解它正在寻找的格式。
尝试 #1:
error_output = "Bad values in:"
numeric_output = 0
inputs = input().strip().split(" ")
try:
x = int(inputs[0])
numeric_output += x
except ValueError:
error_output += " x"
try:
y = int(inputs[1])
numeric_output += y
except ValueError:
error_output += " y"
try:
z = int(inputs[2])
numeric_output += z
except ValueError:
error_output += " z"
if error_output != "Bad values in:":
print(error_output)
else:
print(numeric_output)
虽然这段代码在 Idle 和 Pycharm 上运行都没有问题,但它不是 CodeLab 上的正确答案...这是我 第一次尝试的 CodeLab 的“错误分析” :
-
在每个测试用例中:a) stdout 不正确 和 b) 没有打印到标准输出
您几乎肯定应该使用:+
我还没有看到使用以下方法的正确解决方案:" "
我还没有看到使用以下方法的正确解决方案:" x"
我还没有看到正确的解决方案使用:“y”
我还没有看到一个正确的解决方案使用:“z”
我们认为您可能需要考虑使用:==
我们认为您可能需要考虑使用:sum
采用您的方法的解决方案通常不使用:!=
采用您的方法的解决方案通常不使用:。 (句号)
采用您的方法的解决方案通常不使用:1
采用您的方法的解决方案通常不使用:2
采用您的方法的解决方案通常不使用:[ ]
采用您的方法的解决方案通常不使用:输入
采用您的方法的解决方案通常不使用:strip
我们认为您可能要考虑使用:不
我的第二次尝试:
try:
print(int(x) + int(y) + int(z))
except ValueError:
print("bad value(s) in:")
if not x.isdigit():
print(' x')
if not y.isdigit():
print(' y')
if not z.isdigit():
print(' z')
'错误分析' Attempt #2:
-
在某些测试用例中:stdout 不正确
您几乎肯定应该使用:=
我还没有看到使用以下方法的正确解决方案:"bad value(s) in:"
我还没有看到使用以下方法的正确解决方案:'x'
我还没有看到一个正确的解决方案使用:'y'
我还没有看到使用以下方法的正确解决方案:'z'
您几乎可以肯定应该使用:str
我们认为您可能需要考虑使用:,(逗号)
采用您的方法的解决方案通常不使用:ValueError
最后,这是我的第三次尝试(根据 CodeLab,这是最接近准确的):
try:
print(int(x) + int(y) + int(z))
except ValueError:
print("bad value(s) in:",end='')
if not x.isdigit():
print('x',end='')
if not y.isdigit():
print('y',end='')
if not z.isdigit():
print('z',end='')
'错误分析' Attempt #3:
-
在某些测试用例中:stdout 不正确
我还没有看到使用以下方法的正确解决方案:"bad value(s) in:"
采用您的方法的解决方案通常不使用:''
采用您的方法的解决方案通常不使用:ValueError
我错过了什么?
【问题讨论】:
请更新您的代码,使其成为minimal reproducible example 【参考方案1】:你为什么不尝试在每个变量之前添加空格,我想这会有所帮助。我也遇到过这类问题。
try:
print(int(x) + int(y) + int(z))
except ValueError:
print("bad value(s) in:",end='')
if not x.isdigit():
print(' x',end='')
if not y.isdigit():
print(' y',end='')
if not z.isdigit():
print(' z',end='')
【讨论】:
【参考方案2】:这也应该可以工作:
try:
print(int(x)+int(y)+int(z))
except ValueError:
print('bad value(s) in:', end=' ')
if not x.isdigit():
print('x', end=' ')
if not y.isdigit():
print('y', end=' ')
if not z.isdigit():
print('z', end=' ')
【讨论】:
【参考方案3】:感谢大家的帮助!我发现答案是:
try:
sum = int(x) + int(y) + int(z)
print(sum)
except ValueError:
print("bad value(s) in:",end='')
if not x.isdigit():
print(' x',end='')
if not y.isdigit():
print(' y',end='')
if not z.isdigit():
print(' z',)
【讨论】:
【参考方案4】:sum=0
badvalues=""
try:
sum += int(x)
except ValueError:
badvalues += " x"
try:
sum += int(y)
except ValueError:
badvalues += " y"
try:
sum += int(z)
except ValueError:
badvalues += " z"
if badvalues=="":
print(sum)
else:
print("bad value(s) in:"+badvalues)
【讨论】:
以上是关于Python异常 ValueError的问题详解的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 训练 arima 模型时如何解决 LinAlgError 和 ValueError