Python 错误处理,但仍获取ValueError
我试图解决这个关于错误处理的挑战。也许我走远了 挑战描述: 编写一个名为“load_file”的函数,该函数接受一个参数:文件名。函数应该打开文件并返回内容 如果文件内容可以解释为整数,则将内容返回为整数。否则,如果文件内容可以解释为浮点,则将内容返回为浮点。否则,以字符串形式返回文件的内容 您可以假定该文件只有一行 I get ValueError:无法将字符串转换为浮点:“b>a!\{\” 我对错误处理的看法都错了吗Python 错误处理,但仍获取ValueError,python,string,error-handling,Python,String,Error Handling,我试图解决这个关于错误处理的挑战。也许我走远了 挑战描述: 编写一个名为“load_file”的函数,该函数接受一个参数:文件名。函数应该打开文件并返回内容 如果文件内容可以解释为整数,则将内容返回为整数。否则,如果文件内容可以解释为浮点,则将内容返回为浮点。否则,以字符串形式返回文件的内容 您可以假定该文件只有一行 I get ValueError:无法将字符串转换为浮点:“b>a!\{\” 我对错误处理的看法都错了吗 def load_file(file): file =
def load_file(file):
file = open(file, "r")
all_lines = file.read()
try:
return int(all_lines)
except ValueError:
return float(all_lines)
else:
return all_lines
file.close()
您可以使用
int()
函数来处理抛出的ValueError
,但也有可能float()
也抛出这样的错误。该函数的目的是在try
块内运行可能抛出任何异常(如ValueError
)的代码,并执行“错误处理程序”除了块之外,块内的代码。您可以使用int()
函数处理抛出的ValueError
,但也可能出现float()
也会引发此类错误。的目的是在try
块内运行可能引发任何异常(如ValueError
)的代码,并执行“错误处理程序”除了
块之外,块中的代码。当您尝试以浮点形式解析时,也会出现异常。您可以尝试以下操作
def load_file(file):
file = open(file, "r")
all_lines = file.read()
try:
return int(all_lines)
except ValueError:
try:
return float(all_lines)
except ValueError:
return all_lines
file.close()
您可以将try嵌套在异常中,以使其执行您想要的操作当您尝试以浮点形式解析时,也会出现异常
def load_file(file):
file = open(file, "r")
all_lines = file.read()
try:
return int(all_lines)
except ValueError:
try:
return float(all_lines)
except ValueError:
return all_lines
file.close()
您可以在异常中嵌套try,让它做您想做的事情
with open(file, "r") as file_handle:
all_lines = file.read()
try:
return int(all_lines)
except ValueError:
pass
try:
return float(all_lines)
except ValueError:
pass
return all_lines
关键是你根本不在乎这些错误,因为它们只是意味着你需要继续下一个选项
我还要指出,with
构造负责为您关闭文件。如果您想执行file=open(file,“r”)
操作,则需要将返回值存储到变量中,然后执行file.close()
操作,然后再执行return
操作
with open(file, "r") as file_handle:
all_lines = file.read()
try:
return int(all_lines)
except ValueError:
pass
try:
return float(all_lines)
except ValueError:
pass
return all_lines
关键是你根本不在乎这些错误,因为它们只是意味着你需要继续下一个选项
我还要指出,with
构造负责为您关闭文件。如果您想执行file=open(file,“r”)
操作,则需要将返回值存储到变量中,然后在执行return
之前执行file.close()
操作方法的问题是浮点(所有行)
可能会失败,但不会处理该异常
因此,它应该是:
try:
return int(all_lines)
except ValueError: # handle the exception if it's not an integer
try:
return float(all_lines)
except ValueError: # handle the exception if it's not a float
return all_lines
但是您也可以只处理错误(但需要python 3.3或更新版本)。这可以减少代码的长度和嵌套的try
和的数量,但
s除外:
from contextlib import suppress
def load_file(file):
with open(file, "r") as file: # using open with "with" closes the file automatically.
all_lines = file.read()
with suppress(ValueError):
return int(all_lines)
with suppress(ValueError):
return float(all_lines)
return all_lines
您的方法的问题是浮点(所有行)
可能会失败,但不会处理该异常
因此,它应该是:
try:
return int(all_lines)
except ValueError: # handle the exception if it's not an integer
try:
return float(all_lines)
except ValueError: # handle the exception if it's not a float
return all_lines
但是您也可以只处理错误(但需要python 3.3或更新版本)。这可以减少代码的长度和嵌套的try
和的数量,但
s除外:
from contextlib import suppress
def load_file(file):
with open(file, "r") as file: # using open with "with" closes the file automatically.
all_lines = file.read()
with suppress(ValueError):
return int(all_lines)
with suppress(ValueError):
return float(all_lines)
return all_lines
您知道只有try
块中的代码才受保护,对吧?这个问题有点误导,因为float
也可以解释为整数。int(3.3)
为您提供3
。这意味着尝试先强制转换到int
将导致浮点
被解释为int
,而不抛出ValueError
您知道只有try
块中的代码才受保护,对吗?这个问题有点误导,因为浮点
也可能被保护解释为整数。int(3.3)
为您提供3
。这意味着首先尝试转换为int
将导致float
被解释为int
,而不抛出ValueError
这是错误的,因为否则
可以用作try,catch
的一部分。这是真的,他不需要它。我完全忘记了这个语法因为我不认为我真的用过它,所以编辑了我的帖子,这是错误的,否则
可以用作try,catch
的一部分。看这是真的,他不需要它。我完全忘记了这个语法,因为我不认为我真的用过它,编辑了我在对这个问题的评论中提到的帖子,所有的浮动都可以被压缩因此,如果它在文件中确实是一个浮点值,那么将其转换为浮点值的代码将永远无法访问。我刚才通过python交互式shell运行了此命令:>>int(“1234.4341”)回溯(最近的调用last):file“”,第1行,在ValueError:invalid literal for int()以10为基数:“1234.4341”
@Igle这不对。int('3.0'))
引发异常。正如我在对问题的评论中提到的,所有浮点都可以表示为int。因此,如果文件中确实是浮点,则将其转换为浮点的代码将永远无法访问。我刚才通过python交互式shell运行了此操作:>>int(“1234.4341”)回溯(最近一次调用):file“”,第1行,在ValueError中:以10为基数的int()的文本无效:“1234.4341”
@Igle这不正确。int('3.0')
引发异常。