Rumah  >  Soal Jawab  >  teks badan

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

python2.x

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

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

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

PHPzPHPz2741 hari yang lalu1173

membalas semua(2)saya akan balas

  • 怪我咯

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

    Bagaimana pula dengan mengurangkan butiran cuba-tangkap? Atau tampal kod anda untuk analisis Apa yang anda katakan tentang meneruskan pelaksanaan kod asal selepas pengecualian agak samar-samar.

    【Edit】
    Selepas membaca dua jawapan yang lain, pada asasnya ia adalah dua idea yang saya kemukakan dalam komen di bawah. Ia harus dikatakan bahawa idea semua orang pada dasarnya adalah sama. Ubah suai di sini dan berikan saya pelan kod:

    # 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 

    balas
    0
  • 黄舟

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

    Saya baru sahaja menulis satu, yang menjana Access Token ialah satu-satunya Access Token dalam pangkalan data , tetapi fungsi yang menjana tidak dapat menjamin bahawa Access Token yang dijana setiap masa adalah. sama. Jadi saya menggunakan gelung Access Token yang sangat menjijikkan. Kira-kira seperti berikut: 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

    Tidak pandai, tetapi ia berkesan.

    Atau beritahu saya tentang perniagaan anda, mungkin ia tidak begitu menjijikkan.

    Teks asal soalan: Ini agak menyusahkan saya Sebagai contoh, saya perlu meminta 10 URL dalam urutan Jika URL kelima diputuskan, ralat akan dilaporkan, dan kemudian saya akan melakukannya laksanakan kod untuk menukar IP di bawah kecuali. Ia adalah mustahil untuk menulis seketika untuk setiap permintaan

    Pelan saya:

    def r(uri, data):
        while True:
            try:
                res = requests(uri, data)
                return res
            except:
                change_ip()
    Penyelesaian ini sepatutnya boleh dilakukan untuk permintaan penyegerakan satu proses dan satu utas.

    balas
    0
  • Batalbalas