3

これは私がキャッチしたいエラーです:

 Traceback:
    File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py" in get_response
      111.                         response = callback(request, *callback_args, **callback_kwargs)
    File "/opt/django/fileupload/views.py" in upload_file
      56.         folder_info = url.split(':')[1] #Extracts folder info to use in the header

    Exception Type: IndexError at /upload_file/
    Exception Value: list index out of range

使用してみました:

except (socket.error, paramiko.AuthenticationException, IndexError):
            return render_to_response('reform.html', context_instance=RequestContext(request))

しかし、うまくいきません。

socket.errorとのparamiko.Authentication例外はキャッチできますが、 IndexError. Django で例外をキャッチしようとしています。ありがとう。

編集:tryおよびexceptブロック全体:

try:        
    source = str(username) + "@" + url #Source to list all the files
    add_key = str(username) + "@" + test_url
    add_known_hosts(password, add_key) #Add to the known hosts
    test_ssh(test_url, username, password) #Test Host_name, username and password
    destination = '/home/sachet/files'    
    command = subprocess.Popen(['sshpass', '-p', password, 'rsync', '--recursive', source],
                   stdout=subprocess.PIPE).communicate()[0] #sshpass needs to be installed into the server
    lines = (x.strip() for x in command.split('\n'))
    remote = [x.split(None, 4)[-1] for x in lines if x] #Removes permission from the file listing
    base_name = [os.path.basename(ok) for ok in remote]
    result = subprocess.Popen(['ls', destination], stdout=subprocess.PIPE).communicate()[0].splitlines()

    return render_to_response('thanks.html', {'res1': remote, 'res': result, 'folder': folder_info}, context_instance=RequestContext(request))
except (socket.error, paramiko.AuthenticationException, IndexError):
    return render_to_response('reform.html', context_instance=RequestContext(request)) 
4

1 に答える 1

1

IndexError は、投稿した try/except ブロック内では発生しません。folder_info が割り当てられている行 (views.py の 56 行目) で IndexError が発生します。そのエラーをキャッチするには、そのコード行を try/except ブロックに移動する必要があります。

File "/opt/django/fileupload/views.py" in upload_file
    56.         folder_info = url.split(':')[1]  <-- This line

または、コードの意図をより明確にするために、「folder = ...」行の周りに別の try/except を配置して、IndexError だけにすることをお勧めします。

于 2012-12-19T08:51:16.960 に答える