我想得到一个字符串的一部分。字符串可以有这种格式:
Parte1 - Parte2[Parte3]
或者它也可以有这种其他格式:
Parte1[Parte2]
第一种格式我没有问题,我正在使用这个功能,一切都很好。在这种情况下,我想提取 Part2。
def GetPart(string):
x = string.split("-")
y = x[1].split("[")
return y[0]
当我想将此函数用于第二种格式时会出现问题,我想捕获有条件抛出的异常,以便如果它不能处理第一种格式,它将处理第二种格式。
或多或少是这样的:
def GetPart(string):
try
x = string.split("-")
y = x[1].split("[")
result = y[0]
except IndexError: pass
try
x = string.split("[")
result = y[0]
except IndexError as e:
print( "A retriable error occurred: %s" % e)
return result
如果第一次尝试没有例外,我希望直接返回而不进行第二次尝试。
我试着像这样用 goto 来做:
def GetPart(string):
try:
x = string.split("-")
y = x[1].split("[")
result = y[0]
goto .fin
except IndexError: pass
try:
x = string.split("[")
result = y[0]
except IndexError as e:
print( "A retriable error occurred: %s" % e)
label .fin
return result
但是要么我做错了,要么他们已经删除了 python goto,因为它不起作用。
这可以做到吗?如果可以做到,它是如何做到的?
Python 是一种高度结构化的语言,在这些语言中使用无条件转移语句通常被认为是不必要和不好的做法。在这种情况下,Python 没有直接使用
goto
or之类的指令jump
。使用结构化编程功能(条件、循环等)以简单的方式解决了这些问题。在这种情况下,只需在 中放置另一个即可解决
return
,try
例如:您可以
return
在函数中和任何点(循环内部、条件内部等)拥有任意数量的对象。执行的那一刻,功能在该点结束。虽然它通常不是最常用的,但在 Python 中,您可以使用不同return
的方法,甚至返回不同的类型。另一种选择是不使用异常处理并使用条件:
编辑澄清评论问题:
try-except
但是,您可以毫无问题地嵌套块,因为您在函数内部并且任何函数都会return
终止其执行,所以只要每个块return
在 中都有,您就不能嵌套它们try
,例如:展示:
在 Python 中捕获异常是使用语句完成的
try
,该语句基本上包括:子句
try
:包括我们要处理的可能异常的代码。子句或子句
except
:包含在try
失败时要执行的代码。我们可以指定except
单个捕获某些类型的异常:except
要在使用中捕获异常as
:可选子句
else
try
:在无异常完成时执行。try
在这种情况下,通过避免捕获我们不想处理的异常来保护包含的代码。可选子句
finally
:总是在接线端子之前执行,无论是否发生异常。当子句中发生异常try
并且尚未由子句处理时,except
它会在子句执行后重新引发finally
。退出语句,例如break
,continue
或在执行它们之前return
不阻止finally
执行。pass
当我们声明一个在语法上不能为空的块(导致aIdentationError
)时使用“什么都不做”语句if
,但我们不希望它做任何事情,至少现在是elif
这样。else
except
def
class