[英]Invalid syntax (SyntaxError) in except handler when using comma
我有这段代码:
@app.route('/login/', methods=['GET', 'POST'])
def login():
error = None
if request.method == 'POST':
session['username'] = request.form['username']
session['password'] = request.form['password']
try:
# use reddit_api's login
r.login(user=session['username'], password=session['password'])
except InvalidUserPass, e:
error = 'Incorrect username or password. '
if not error:
subreddits = r.user.get_my_reddits(limit=25)
my_reddits = []
for i in range(25):
my_reddits.append(subreddits.next().display_name)
session['my_reddits'] = my_reddits
return redirect(url_for('index'))
return render_template('login.html', error=error)
在 2.x 中,它工作正常,但在 3.x 中,我收到如下错误消息:
File "app.py", line 101
except InvalidUserPass, e:
^
SyntaxError: invalid syntax
为什么会发生这种情况,我该如何解决?
简单地说except InvalidUserPass as e:
. 为了天堂的缘故,让我们摆脱丑陋的error
:
@app.route('/login/', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
session['username'] = request.form['username']
session['password'] = request.form['password']
try:
# use reddit_api's login
r.login(user=session['username'], password=session['password'])
except InvalidUserPass as e:
return render_template('login.html',
error='Incorrect username or password.')
subreddits = r.user.get_my_reddits(limit=25)
my_reddits = []
for i in range(25):
my_reddits.append(subreddits.next().display_name)
session['my_reddits'] = my_reddits
return redirect(url_for('index'))
return render_template('login.html')
在python3中它是:
except InvalidUserPass as e:
file /usr/libexec/urlgrabber-ext-down line 28 except oserror e invalid syntax
modify /usr/bin/yum and /usr/libexec/urlgrabber-ext-dow files
#!/usr/bin/python to #!/usr/bin/python2
问题将得到解决。
在 Python 2.x 中,语法except ExampleError, e:
表示将捕获ExampleError
类型的异常,并且名称e
将用于except
块内的该异常。
在 3.x 中,最接近的等效语法是except ExampleError as e:
。 (这也将在 except 块结束后显式删除名称e
,这与 2.x 中的名称将保持定义不同。)
如果您自己的代码中出现此错误,只需相应地修复它即可。
如果此错误出现在库代码中( example , example ),则表明该库不支持Python 的现代版本,或者安装已过时,需要升级到更新的库版本。 请阅读库的文档以检查版本兼容性,不要尝试自己修复它(除非你打算接管整个项目。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.