Hello! It apparently happens often that some people install Python 3 and try to run pywikipedia. pywikipedia then fails ungracefully, with unclear Syntax Errors, because of syntax changes:
1) Calling login.py $ python3 login.py File "login.py", line 61 'en': u'Wikipedia:Registered bots', ^ SyntaxError: invalid syntax 2) Importing wikipedia $ python3 Python 3.0.1+ (r301:69556, Apr 15 2009, 15:59:22) [GCC 4.3.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import wikipedia Traceback (most recent call last): File "<stdin>", line 1, in <module> File "wikipedia.py", line 354 raise InvalidTitle(u'Bad page title : %s' % t) ^ SyntaxError: invalid syntax Beginner users then understand that pywikipedia is broken :) I tried to fix this issue today, to at least be able to output some meaningful info when Python3 dies. Problem: Because Python3 fails on Syntax Errors, no imports are processed, and no code is ever interpreted: the parser first parses the code, raising Syntax Errors, and then only starts interpreting the code. It makes this issue troublesome. I came up with this patch: Index: login.py =================================================================== --- login.py (revision 6857) +++ login.py (working copy) @@ -50,7 +50,11 @@ # __version__='$Id$' -import re +import re, sys + +if sys.version >= '3': + print 'Python 3.x is _not_ supported. Use Python 2.x' + import urllib2 import wikipedia, config Index: wikipedia.py =================================================================== --- wikipedia.py (revision 6858) +++ wikipedia.py (working copy) @@ -123,6 +123,10 @@ __version__ = '$Id$' import os, sys + +if sys.version >= '3': + print 'Python 3.x is _not_ supported. Use Python 2.x' + import httplib, socket, urllib import traceback import time, threading, Queue 1) Calling login.py Behavior after: $ python3 login.py File "login.py", line 56 print 'Python 3.0 is _not_ supported. Use Python 2.x' ^ SyntaxError: invalid syntax 2) Importing wikipedia: $ python3 Python 3.0.1+ (r301:69556, Apr 15 2009, 15:59:22) [GCC 4.3.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import wikipedia Traceback (most recent call last): File "<stdin>", line 1, in <module> File "wikipedia.py", line 128 print 'Python 3.0 is _not_ supported. Use Python 2.x' ^ SyntaxError: invalid syntax As you see, Python3 will still fail on a syntax error. The hackish, bad-looking "trick" is only to make it fail on a line that shows, in a text message, what's wrong. Do you have any better suggestions on how to do this? I need to document the "hack" in the code of course, I just included a minimal patch for the mailing list. I thought adding this check in wikipedia.py ; and in login.py : they seem to be the first entry points. Should I add it somewhere else? test.py maybe? Thanks! -- Nicolas Dumazet — NicDumZ [ nɪk.d̪ymz ] _______________________________________________ Pywikipedia-l mailing list Pywikipedia-l@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/pywikipedia-l