Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 错误处理,但仍获取ValueError_Python_String_Error Handling - Fatal编程技术网

Python 错误处理,但仍获取ValueError

Python 错误处理,但仍获取ValueError,python,string,error-handling,Python,String,Error Handling,我试图解决这个关于错误处理的挑战。也许我走远了 挑战描述: 编写一个名为“load_file”的函数,该函数接受一个参数:文件名。函数应该打开文件并返回内容 如果文件内容可以解释为整数,则将内容返回为整数。否则,如果文件内容可以解释为浮点,则将内容返回为浮点。否则,以字符串形式返回文件的内容 您可以假定该文件只有一行 I get ValueError:无法将字符串转换为浮点:“b>a!\{\” 我对错误处理的看法都错了吗 def load_file(file): file =

我试图解决这个关于错误处理的挑战。也许我走远了

挑战描述:

编写一个名为“load_file”的函数,该函数接受一个参数:文件名。函数应该打开文件并返回内容

如果文件内容可以解释为整数,则将内容返回为整数。否则,如果文件内容可以解释为浮点,则将内容返回为浮点。否则,以字符串形式返回文件的内容

您可以假定该文件只有一行

I get ValueError:无法将字符串转换为浮点:“b>a!\{\”

我对错误处理的看法都错了吗

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')
引发异常。