Maison  >  Questions et réponses  >  le corps du texte

python2.7 - 在python中处理错误时,在执行完except语句下的内容后是否有办法回跳到代码出错的地方继续执行

python2.x

跑一段代码的时候,可能会报错某个错误,如果报错了,只需要进行一些处理,然后再继续执行原来的代码就好。

我目前是用try .. except来处理的,但是像这样只要报错就只会执行except下的代码然后程序结束

如果我加上finally的话,我又不能知道具体出错的是哪句代码(每一句都有可能报错),所以也没办法在finally下面加上后续的代码。

PHPzPHPz2741 Il y a quelques jours1174

répondre à tous(2)je répondrai

  • 怪我咯

    怪我咯2017-04-18 09:59:02

    Que diriez-vous de réduire la granularité du try-catch ? Ou collez votre code pour analyse. Ce que vous avez dit sur la poursuite de l'exécution du code d'origine après une exception est un peu vague.

    【Modifier】
    Après avoir lu les deux autres réponses, ce sont essentiellement les deux idées que j'ai avancées dans les commentaires ci-dessous. Il faut dire que les idées de chacun sont fondamentalement les mêmes. Modifiez ici et donnez-moi un plan de code :

    # introduce a new function
    # @return: succeed, new_ip
    def exec(ip, url):
        try:
            # do what you want to do 
            return True, ip
        except:
            # change your id
            return False, new_ip
            
    # your original logics
    urls = [url1, url2, ..., url10]
    i = 0
    ip = ip1
    while i <= len(urls):
        succeed, ip = exec(ip, urls[i])
        if succeed:
            i +=1 

    répondre
    0
  • 黄舟

    黄舟2017-04-18 09:59:02

    Je viens d'en écrire un, qui génère Access Token est le seul Access Token dans la base de données , mais la fonction qui génère ne peut pas garantir que le Access Token généré à chaque fois est le pareil. Pas pareil. J’ai donc utilisé une boucle Access Token vraiment dégoûtante. C'est à peu près comme suit : while

    while True:
        try:
            access_token = make_token()
            access_token.add_to_db
            break
        except IntegrityError as e:
            if e.orig.args[0] == 1062:
                # 这种情况下,发生了mysql 1062异常,说明数据库中有重复的access token,需要反复生成新的,直至不同
                pass
            else:
                raise e

    Pas malin, mais ça marche.

    Ou parlez-moi de votre entreprise, ce ne sera peut-être pas si dégoûtant.

    Texte original de la question : C'est un peu plus gênant pour moi. Par exemple, je dois demander 10 URL dans l'ordre. Si la cinquième URL est déconnectée, une erreur sera signalée, puis je le ferai. exécutez le code pour changer l'IP ci-dessous sauf qu'il est impossible d'écrire un certain temps pour chaque requête. C'est tout simplement inesthétique

    .
    Mon forfait :

    def r(uri, data):
        while True:
            try:
                res = requests(uri, data)
                return res
            except:
                change_ip()

    Cette solution devrait être possible pour les demandes de synchronisation à processus unique et à thread unique.

    répondre
    0
  • Annulerrépondre