Added hook: setup_wizard_exception
diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.py b/erpnext/setup/page/setup_wizard/setup_wizard.py
index aa96558..4b55f5b 100644
--- a/erpnext/setup/page/setup_wizard/setup_wizard.py
+++ b/erpnext/setup/page/setup_wizard/setup_wizard.py
@@ -15,66 +15,73 @@
 
 @frappe.whitelist()
 def setup_account(args=None):
-	frappe.clear_cache()
+	try:
+		frappe.clear_cache()
 
-	if frappe.db.sql("select name from tabCompany"):
-		frappe.throw(_("Setup Already Complete!!"))
+		if frappe.db.sql("select name from tabCompany"):
+			frappe.throw(_("Setup Already Complete!!"))
 
-	if not args:
-		args = frappe.local.form_dict
-	if isinstance(args, basestring):
-		args = json.loads(args)
-	args = frappe._dict(args)
+		if not args:
+			args = frappe.local.form_dict
+		if isinstance(args, basestring):
+			args = json.loads(args)
 
-	if args.language != "english":
-		set_default_language(args.language)
+		args = frappe._dict(args)
 
-	install_fixtures.install(args.get("country"))
+		if args.language != "english":
+			set_default_language(args.language)
 
-	update_user_name(args)
-	frappe.local.message_log = []
+		install_fixtures.install(args.get("country"))
 
-	create_fiscal_year_and_company(args)
-	frappe.local.message_log = []
+		update_user_name(args)
+		frappe.local.message_log = []
 
-	set_defaults(args)
-	frappe.local.message_log = []
+		create_fiscal_year_and_company(args)
+		frappe.local.message_log = []
 
-	create_territories()
-	frappe.local.message_log = []
+		set_defaults(args)
+		frappe.local.message_log = []
 
-	create_price_lists(args)
-	frappe.local.message_log = []
+		create_territories()
+		frappe.local.message_log = []
 
-	create_feed_and_todo()
-	frappe.local.message_log = []
+		create_price_lists(args)
+		frappe.local.message_log = []
 
-	create_email_digest()
-	frappe.local.message_log = []
+		create_feed_and_todo()
+		frappe.local.message_log = []
 
-	create_letter_head(args)
-	frappe.local.message_log = []
+		create_email_digest()
+		frappe.local.message_log = []
 
-	create_taxes(args)
-	frappe.local.message_log = []
+		create_letter_head(args)
+		frappe.local.message_log = []
 
-	create_items(args)
-	frappe.local.message_log = []
+		create_taxes(args)
+		frappe.local.message_log = []
 
-	create_customers(args)
-	frappe.local.message_log = []
+		create_items(args)
+		frappe.local.message_log = []
 
-	create_suppliers(args)
-	frappe.local.message_log = []
+		create_customers(args)
+		frappe.local.message_log = []
 
-	frappe.db.set_default('desktop:home_page', 'desktop')
+		create_suppliers(args)
+		frappe.local.message_log = []
 
-	website_maker(args.company_name, args.company_tagline, args.name)
-	create_logo(args)
+		frappe.db.set_default('desktop:home_page', 'desktop')
 
-	frappe.clear_cache()
-	frappe.db.commit()
+		website_maker(args.company_name, args.company_tagline, args.name)
+		create_logo(args)
 
+		frappe.clear_cache()
+		frappe.db.commit()
+	except:
+		traceback = frappe.get_traceback()
+		for hook in frappe.get_hooks("setup_wizard_exception"):
+			frappe.get_attr(hook)(traceback, args)
+
+		raise
 
 def update_user_name(args):
 	if args.get("email"):