您需要捕获 TypeError 异常。这就是问题的答案:
def name_add(a,b):
try:
return a+b
except TypeError:
print 'The + operator is not defined for a and b'
return None
正如 Lattyware 评论的那样,捕获异常并仅打印一条消息并不是一个好习惯。您应该:
- 解决函数中的异常,以便函数继续运行并产生合理的结果(在这种情况下这是不可能的)。
- 让程序在更高级别捕获异常。
看看我的一个程序的这个片段。这是顶层函数:
def main(argv):
"""Main program for the nc2pdf utility.
:argv: command line arguments
"""
if len(argv) == 1: # No filenames given, only the name of the script
binary = os.path.basename(argv[0])
print __proginfo__
print "Usage: {} [file ...]".format(binary)
print
sys.exit(0)
del argv[0]
for fn in argv: # Loop over all the files
try:
ofn = outname(fn) # outname can raise ValueError...
with open(fn, 'r') as inf: # Open can raise IOError
rd = inf.read()
except ValueError:
fns = "Cannot construct output filename. Skipping file '{}'."
print fns.format(fn)
continue
except IOError:
print "Cannot open the file '{}'. Skipping it.".format(fn)
continue
... # do something with the file's data
在这种情况下,可以通过跳过(不处理)命令行中指定的文件之一并继续处理下一个文件来处理异常。此处不处理异常会使程序崩溃,即使其他文件可能仍在处理中。文件名可能拼写错误,或者进程可能没有文件的访问权限。这些事情发生了,应该优雅地处理。