Skip to main content
 首页 » 编程设计

python之在 Python 中多次尝试处理一个异常的好方法是什么

2025年05月04日11insus

比方说,我有一个首选的解决方案来处理异常。
但有时仍然会出现异常,我不得不使用第二种不太受欢迎的解决方案。
我使用如下代码,它可能看起来不太酷。如果有更好的做法,请指教。

try: 
    print(undefined_varible) 
except NameError: 
    try: 
        print("1st attempt to handle NameError exception") 
    except NameError: 
        print("2nd attempt to handle NameError exception") 

更新:
这是我的一段真实代码

import re 
def find_phone(text): 
    try: 
        pattern = re.compile(r"(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?") 
        #search for a phone number 
        mo = pattern.search(text) 
        phone = mo.group() 
        print (phone) 
    except AttributeError: 
        try: 
            #don't want to use this pattern always because it's too wide and not perfect 
            pattern = re.compile(r"(?:\+?(\d{1,3}))?[-. (]*(\d{1,3})[-. )]*(\d{1,3})[-. ]*(\d{1,4})([-. ]*(\d{1,4}))?([-. ]*(\d{1,4}))?(?: *x(\d{1,4}))?") 
            mo = pattern.search(text) 
            phone = mo.group() 
            print (phone) 
        except AttributeError: 
            print("phone number has not been found") 
find_phone("here is the weird formatted phone number: +33 6 29 37 24 57") 

请您参考如下方法:

假设您有多种方法来检查电话号码。一个想法是在你的函数中有一个计数器,并通过 if 语句选择要尝试的计数器

import re 
def find_phone(text): 
    number_of_cases = 2 
    i = 0 
    while i < number_of_cases 
        try: 
            if i == 0: 
                pattern = re.compile(r"(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?") 
                #search for a phone number 
                mo = pattern.search(text) 
                phone = mo.group() 
                print (phone) 
            elif i == 1: 
                #don't want to use this pattern always because it's too wide and not perfect 
                pattern = re.compile(r"(?:\+?(\d{1,3}))?[-. (]*(\d{1,3})[-. )]*(\d{1,3})[-. ]*(\d{1,4})([-. ]*(\d{1,4}))?([-. ]*(\d{1,4}))?(?: *x(\d{1,4}))?") 
               mo = pattern.search(text) 
               phone = mo.group() 
               print (phone) 
        except AttributeError: 
            i += 1 
        else: break 

另一个想法是检查您是否找到了电话号码