当列表超出Python范围时返回特定值

4 python default return arraylist range

如果列表超出范围,我该如何返回特定值?这是我到目前为止的代码:

def word(num):
  return ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'][num-1]
Run Code Online (Sandbox Code Playgroud)

word(1)将返回'Sunday',但如果num不是一个整数,我怎么能返回一个默认值1-7

因此,word(10)会返回类似的东西"Error".

Kau*_* NP 5

正常if/else应该足够了.

def word(num):
    l = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
    return l[num-1] if 0<num<=len(l) else "Error"
Run Code Online (Sandbox Code Playgroud)

#driver代码

>>> word(7)
=> 'Saturday'

>>> word(8)
=> 'Error'

>>> word(-10)
=> 'Error'
Run Code Online (Sandbox Code Playgroud)


cs9*_*s95 5

使用高度pythonic EAFP方法与try-except.

daysofweek = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
def getday(num):
    try:
        return daysofweek[num - 1]
    except IndexError:
        return "Error"
Run Code Online (Sandbox Code Playgroud)


Eri*_*nil 5

您可以将列表转换为dict enumerate(sequence, start=1):

dict(enumerate(['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'], 1))
# {1: 'Sunday', 2: 'Monday', 3: 'Tuesday', 4: 'Wednesday', 5: 'Thursday', 6: 'Friday', 7: 'Saturday'}
Run Code Online (Sandbox Code Playgroud)

然后,您的查询很简单dict.get():

wdays = {1: 'Sunday', 2: 'Monday', 3: 'Tuesday', 4: 'Wednesday', 5: 'Thursday', 6: 'Friday', 7: 'Saturday'}

def word(num):
    return wdays.get(num, 'Error')
Run Code Online (Sandbox Code Playgroud)

这是一个例子:

>>> word(3)
'Tuesday'
>>> word(10)
'Error'
>>> word('garbage')
'Error'
Run Code Online (Sandbox Code Playgroud)

根据你想要对字符串做什么,返回'Error'而不是简单地抛出一个错误可能不是一个好主意.否则,您将必须检查字符串是否像一周工作日或等于'Error'每次使用此功能.

  • 这种方法的另一个好处是,如果`word`被传递_any_ bad arg,它也将返回'Error',而不仅仅是超出范围的整数. (2认同)