MFP编程语言try,throw,catch,endtry语句:
Try语句用于开始一个Try程序块。Try语句没有任何参数。在Try程序块中,任何由于MFP语言触发的异常将会被抛出并传递到跟随try程序块的某一个catch语句中处理。当然,如果没有一个catch语句能够处理这个被抛出来的异常,该异常将会被抛向外层的程序块或函数。
Throw语句有一个字符串参数。如果throw语句被执行,MFP打印出字符串参数然后退出。
Catch语句可以接受一个表达式作为参数,也可以不接受参数。如果不接受参数,该catch语句捕获任何由该语句对应的try程序块抛出的异常。如果它有一个表达式参数,该表达式参数作为一个异常过滤器用于决定一个异常是否由该catch语句处理。如果异常过滤器表达式的值是布尔值true,该异常被捕获,否则,该异常被传递到下一个catch语句,或者被抛向外层的程序块或函数。Catch语句提供三个字符串类型的内部参数,也就是level,type和info。参数level存储异常的层级,它的值是"LANGUAGE"(也就是编程语言级别的异常,比如没有endif语句跟随if语句或者一个用户定义的抛出字符串的异常)或者"EXPRESSION"(也就是表达式级别的异常,比如被零除或者缺少右括号),参数type是MFP编程语言内部定义异常的类型,参数info是异常的内容。如果开发人员用一个throw语句抛出一个字符串,info的值就是这个字符串。这三个参数仅能用于catch语句中的异常过滤器。但是异常过滤器可以使用变量名和函数名空间中的任意变量和函数。如果一个变量和这三个catch语句的内部参数重名,它将被重名内部参数重载。
Endtry用于结束一个try/catch程序块,它不接受任何参数。
以下是try/throw/catch/endtry的例子。
Function testtry1()
Variable a, b, c
a = 3
Try
Select a
Case 3
print("a == 1\n")
Try
print (NULL==FALSE)
dbc
Catch
print ("Cannot cvt NULL to boolean or dbc is undefined\n")
EndTry
EndS
Throw "my exception"
Catch (1+2)==4
print ("IN (1+2) == 4")
catch false
print ("In false")
Catch and((b=level)=="LANGUAGE", (c=info) == "my exception")
print ("In catch and, b = ")
print (b)
print ("\n")
Help
Try
c = adb
Catch
print (" c= adb")
EndTry
Help
Endh
Try
c = 3/0
Catch And((c= info)==c, level == "LANGUAGE")
print ("In Language\n")
print (c)
Catch And((c= info)==c, level=="EXPRESSION")
print ("In Expression\n")
print (c)
EndTry
print ("In upper level try\n")
print (b)
print (" , c = ")
print (c)
print ("\n")
Catch or((b=level)=="LANGUAGE", (c=info) == "my exception")
print ("In catch or, b = ")
print (b)
print (" , c = ")
print (c)
print ("\n")
Endtry
Endf
这个函数的输出结果如下:
a == 1 FALSECannot cvt NULL to boolean or dbc is undefined In catch and, b = LANGUAGE In Expression Zero division!In upper level try LANGUAGE , c = Zero division!