2016-08-11 8 views
-1

私はPythonの新機能です。私はファイルのアップロードWeb APIで例外を処理しようとしています。しかし、私は捕まえることができません。成功した場合は、アップロードされたファイルが表示されます。Pythonで例外処理が失敗する

app.py:

from flask import Flask 
from flask_cors import CORS, cross_origin 
from flask import request,jsonify 

import smtplib, os, cgi 
from email.mime.application import MIMEApplication 
from email.mime.multipart import MIMEMultipart 
from email.mime.base import MIMEBase 
from email.mime.text import MIMEText 
from email import encoders 
from werkzeug.utils import secure_filename 

app = Flask(__name__) 
CORS(app) 
app.config['UPLOAD_FOLDER'] = 'upload/' 
# These are the extension that we are accepting to be uploaded 
app.config['ALLOWED_EXTENSIONS'] = set(['txt', 'pdf','docx','ods','xls']) 

# For a given file, return whether it's an allowed type or not 
def allowed_file(filename): 
    return '.' in filename and \ 
      filename.rsplit('.', 1)[1] in app.config['ALLOWED_EXTENSIONS'] 

@app.route('/upload', methods=['POST']) 
def upload(): 
    file = request.files['file'] 
    try: 
     if file and allowed_file(file.filename): 
      filename = secure_filename(file.filename) 
      file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 
     return('file uploaded successfully') 
    except IOError: 
     return("fail file upload") 

if __name__=="__main__": 
    app.run(debug=True) 
+0

確認するすべての例外をキャッチしてみましたか? –

+1

'IOError'は正しい例外タイプであってはなりません。最初に 'Exception'で置き換え、それを印刷して後で修正します。 OR:try/exceptなしで実行させてから修正します。 –

答えて

2

すべての例外をキャッチするためにこれを試してみてください:

try: 
    raise ValueError('stuff') 
except BaseException as e: 
    print 'Statement:', e.args 
    print 'Type:', type(e) 

出力:

声明:( 'もの'、)

タイプ:(クラス 'ValueError')

BaseExceptionを使用すると、すべての例外タイプがキャプチャされ、次にeを照会して、その内容を確認できます。明らかにすべての例外をキャプチャするように注意する必要があります。一般的には非常に良い方法ではありませんが、少なくともデバッグには役立ちます。タイプが何であるかを見ると、戻ってそれを絞り込むことができます。