Define & use NetrcParseError instead of improperly overloading SyntaxError.
Always has the lineno and filename of the source text.
diff --git a/Lib/netrc.py b/Lib/netrc.py
index bf944b7..b9ce6ba 100644
--- a/Lib/netrc.py
+++ b/Lib/netrc.py
@@ -4,7 +4,20 @@
import os, shlex
-__all__ = ["netrc"]
+__all__ = ["netrc", "NetrcParseError"]
+
+
+class NetrcParseError(Exception):
+ """Exception raised on syntax errors in the .netrc file."""
+ def __init__(self, msg, filename=None, lineno=None):
+ self.filename = file
+ self.lineno = lineno
+ self.msg = msg
+ Exception.__init__(self, msg)
+
+ def __str__(self):
+ return "%s (%s, line %s)" % (self.msg, self.filename, self.lineno)
+
class netrc:
def __init__(self, file=None):
@@ -37,8 +50,8 @@
tt = line
self.macros[entryname].append(line)
else:
- raise SyntaxError, "bad toplevel token %s, file %s, line %d" \
- % (tt, file, lexer.lineno)
+ raise NetrcParseError(
+ "bad toplevel token %r" % tt, file, lexer.lineno)
# We're looking at start of an entry for a named machine or default.
if toplevel == 'machine':
@@ -54,7 +67,10 @@
lexer.push_token(tt)
break
else:
- raise SyntaxError, "malformed %s entry %s terminated by %s" % (toplevel, entryname, repr(tt))
+ raise NetrcParseError(
+ "malformed %s entry %s terminated by %s"
+ % (toplevel, entryname, repr(tt)),
+ file, lexer.lineno)
elif tt == 'login' or tt == 'user':
login = lexer.get_token()
elif tt == 'account':
@@ -62,7 +78,8 @@
elif tt == 'password':
password = lexer.get_token()
else:
- raise SyntaxError, "bad follower token %s, file %s, line %d"%(tt,file,lexer.lineno)
+ raise NetrcParseError("bad follower token %r" % tt,
+ file, lexer.lineno)
def authenticators(self, host):
"""Return a (user, account, password) tuple for given host."""