我在运行try-except函数时遇到了麻烦(something_to_military)。在我的try部分中,我调用了另一个函数(is_time_format),我已经对其进行了全面的测试,并且在我尝试过的每个测试用例中都有效。但是,每当我调用后缀无效的值时,它都不会产生“无效时间格式”。我的一个朋友为is_time_valid写了一个不同的代码,但是我们对something_to_military有相同的代码。我知道我的is_time_format代码有问题,因为每当我使用诸如“2:45 AMX”之类的参数时,它不会导致我的something_to_military代码产生“无效时间格式”。有谁知道发生了什么事?
def is_time_format(s): msgstr“”“返回:如果s是12格式的字符串,则返回True:AM / PM
Example:
is_time_format('2:45 PM') returns True
is_time_format('2:45PM') returns False
is_time_format('14:45') returns False
is_time_format('14:45 AM') returns False
is_time_format(245) returns False
Parameter s: the candidate time to format
Precondition: NONE (s can be any value)"""
# HINT: Your function must be prepared to do something if s is a string.
# Even if s is a string, the first number before the colon may be one
# or two digits. You must be prepared for either.
# You might find the method s.isdigit() to be useful.
pos1 = s.find(':')
pos2 = s.find(' ')
suff = s[pos2+1:]
x=s[:pos1]
y=s[pos1+1:pos2]
if type(s)!=type('str'):
return False
elif x.isalpha == False:
return False
elif y.isalpha == False:
return False
elif s.count(':') != 1:
return False
elif x.isdigit() == False:
return False
elif y.isdigit() == False:
return False
elif len(x)>=3:
return False
elif len(y)>=3:
return False
elif int(x)>12:
return False
elif int(y)>60:
return False
elif suff !='AM' and suff !='PM':
return False
else:
return True
def something_to_military(s): “”返回:适当的24小时(军事)格式的时间。
The function is the same as time_to_military if s satisfies the
precondition for that function. If s does not satisfy the precondition
then this function returns 'Invalid time format'
Examples:
something_to_military('2:45 PM') returns '14:45'
something_to_military('9:05 AM') returns '09:05'
something_to_military('12:00 AM') returns '00:00'
something_to_military(905) returns 'Invalid time format'
something_to_military('abc') returns 'Invalid time format'
something_to_military('9:05') returns 'Invalid time format'
Parameter s: the candidate time to format
Precondition: NONE (s can be any value)"""
# You are not allowed to use 'if' in this definition. Use try-except instead.
# Hint: You have to complete PART 2 before you complete this part.
try:
is_time_format(s) == True
return time_to_military(s)
except:
return 'Invalid Time Format'
答案 0 :(得分:1)
您定义is_time_format
的方式(您没有向我们展示),它永远不会引发异常,只会返回True
或False
。
你打电话的方式:
is_time_format(s) == True
......也不会提出异常;您只需将True
或False
与True
进行比较,然后忽略结果。
您想要的只是一个if
声明:
if is_time_format(s):
return time_to_military(s)
else:
return 'Invalid Time Format'
由于您不允许这样做,您必须执行以下两项操作之一:
首先,您可以重写is_time_format
,因此它会引发异常,而不是返回True
或False
。基本上,将每return False
更改为ValueError(f'{s} is not a time format')
之类的内容,并将return True
放在最后。 (当然,确保更改docstring以匹配行为。)
或者,你可以在False
上写一些引发异常的东西。如果没有if
,这将是人为的和愚蠢的,但也有选择。例如:
{True: True}[is_time_format(s)]
会提出KeyError
。assert is_time_format(s)
会提出AssertionError
。1 / (1-is_time_format(s))
会提出DivisionByZeroError
。