Python 自定义函数在出现错误时返回的内容
我有一个函数,在某些情况下可能会得到一些不适合该函数应该做的输入。在这种情况下,我不希望停止程序并返回错误,而是希望函数简单地返回一些特定的内容,例如字符串Python 自定义函数在出现错误时返回的内容,python,list,Python,List,我有一个函数,在某些情况下可能会得到一些不适合该函数应该做的输入。在这种情况下,我不希望停止程序并返回错误,而是希望函数简单地返回一些特定的内容,例如字符串输入中有错误 让我举一个具体的例子。这是一个函数,它以指示国际象棋移动的字符串作为输入,并以列表的形式返回实际移动(初始方格和最终方格) 如果我输入正确,一切正常: print move_name_converter('a2a3') 将正确返回 [[1, 7], [2, 7]] 相反,如果我给出了错误的输入: print move_nam
输入中有错误
让我举一个具体的例子。这是一个函数,它以指示国际象棋移动的字符串作为输入,并以列表的形式返回实际移动(初始方格和最终方格)
如果我输入正确,一切正常:
print move_name_converter('a2a3')
将正确返回
[[1, 7], [2, 7]]
相反,如果我给出了错误的输入:
print move_name_converter('whatever')
它返回一个ValueError
。
与其返回错误(任何类型的错误),我希望函数只打印一个字符串,如这不是有效的输入。
我可以通过仔细考虑每一种可能的方式来解决这个问题,输入可能是坏的,但是有没有一种方法能在错误发生时使函数返回给定的输出? < p>可以使用<代码>尝试< /COD> <代码>,除了语句来捕获<代码> ValueError < /C> >,并且如果发生的话,返回一个自定义字符串:
def move_name_converter(name):
try:
columns=list(string.ascii_lowercase)[:8]
columns.reverse()
move=[]
move.append([int(name[1])-1,columns.index(name[0])])
move.append([int(name[3])-1,columns.index(name[2])])
if len(name)==5:
move.append(name[4])
return move
except ValueError:
return 'This is not a valid input'
print (move_name_converter('a2a3'))
[[1, 7], [2, 7]]
print (move_name_converter('whatever'))
This is not a valid input
您可以使用try
except
语句捕获ValueError
并在出现以下情况时返回自定义字符串:
def move_name_converter(name):
try:
columns=list(string.ascii_lowercase)[:8]
columns.reverse()
move=[]
move.append([int(name[1])-1,columns.index(name[0])])
move.append([int(name[3])-1,columns.index(name[2])])
if len(name)==5:
move.append(name[4])
return move
except ValueError:
return 'This is not a valid input'
print (move_name_converter('a2a3'))
[[1, 7], [2, 7]]
print (move_name_converter('whatever'))
This is not a valid input
您可以将整个函数体包装在一个try:。。。例外情况除外:返回“有错误”
。将字符串打印为错误类型会破坏错误的目的,即调用方可以通过编程方式处理错误。对于无效的输入参数,引发ValueError
或TypeError
似乎已经是合适的响应了。可能对于某些函数来说,返回类似于None
的标志是合适的,但是返回字符串描述基本上是不可能的,因为这个功能是由错误支持的。我可以问一下谁和在哪里为这个函数插入参数吗?@3sm1r然后你要么按照公布的答案去做,要么你把参数作为输入添加到你的函数中,并为每个参数创建控件,以确保输入的参数在所需的范围内格式。否则返回raise ERROR,则这是函数的副本。您可以将函数的整个主体包装在一个try:。。。例外情况除外:返回“有错误”
。将字符串打印为错误类型会破坏错误的目的,即调用方可以通过编程方式处理错误。对于无效的输入参数,引发ValueError
或TypeError
似乎已经是合适的响应了。可能对于某些函数来说,返回类似于None
的标志是合适的,但是返回字符串描述基本上是不可能的,因为这个功能是由错误支持的。我可以问一下谁和在哪里为这个函数插入参数吗?@3sm1r然后你要么按照公布的答案去做,要么你把参数作为输入添加到你的函数中,并为每个参数创建控件,以确保输入的参数在所需的范围内格式。否则返回raise ERROR,则这是TY的副本。是否可以包括ValueError
以外的其他类型的错误,例如indexer
?是的,您可以添加更多except语句,例如except indexer
,以捕获不同的错误。我注意到,如果我使用Exception
,它同时包括ValueError
和indexer
。我这么说是因为我不确定在这种情况下,打字错误会导致什么样的错误。是否可以包括ValueError
以外的其他类型的错误,例如indexer
?是的,您可以添加更多except语句,例如except indexer
,以捕获不同的错误。我注意到,如果我使用Exception
,它同时包括ValueError
和indexer
。我这么说是因为我不确定在这种情况下,打字错误会导致什么样的错误。