Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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 自定义函数在出现错误时返回的内容_Python_List - Fatal编程技术网

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
。我这么说是因为我不确定在这种情况下,打字错误会导致什么样的错误。