Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何从PyMSSQL捕获异常_Sql Server_Python 3.x_Exception Handling_Pymssql - Fatal编程技术网

Sql server 如何从PyMSSQL捕获异常

Sql server 如何从PyMSSQL捕获异常,sql-server,python-3.x,exception-handling,pymssql,Sql Server,Python 3.x,Exception Handling,Pymssql,我正在使用PyMSSQL连接到数据库。但是,如果我输入了不正确的详细信息或存在其他问题,PyMSSQL将抛出异常。但是,我无法解决如何捕获异常。我使用了我能想到的每一种变体,但我似乎无法优雅地捕捉到例外 我的连接代码是: import pymssql import getpass tempServer = input("Enter host: ") tempUser = input("Enter user: ") tempPwd = getpass.getpass("Enter passwor

我正在使用PyMSSQL连接到数据库。但是,如果我输入了不正确的详细信息或存在其他问题,PyMSSQL将抛出异常。但是,我无法解决如何捕获异常。我使用了我能想到的每一种变体,但我似乎无法优雅地捕捉到例外

我的连接代码是:

import pymssql
import getpass

tempServer = input("Enter host: ")
tempUser = input("Enter user: ")
tempPwd = getpass.getpass("Enter password: ")

try:
    phjTempConnection = pymssql.connect(server = tempServer,
                                        user = tempUser,
                                        password = tempPwd,
                                        port = '1433')
except pymssql.MSSQLDatabaseException:
    print("ERROR")
如果我在输入字段中输入废话,我将得到以下输出:

---------------------------------------------------------------------------
MSSQLDatabaseException                    Traceback (most recent call last)
pymssql.pyx in pymssql.connect (pymssql.c:10734)()

_mssql.pyx in _mssql.connect (_mssql.c:21821)()

_mssql.pyx in _mssql.MSSQLConnection.__init__ (_mssql.c:6581)()

_mssql.pyx in _mssql.maybe_raise_MSSQLDatabaseException (_mssql.c:17524)()

MSSQLDatabaseException: (18456, b'Unknown error')

During handling of the above exception, another exception occurred:

OperationalError                          Traceback (most recent call last)
<ipython-input-21-22d7fd0e3d05> in <module>()
     11                                         password = tempPwd,
---> 12                                         port = '1433')
     13 except pymssql.MSSQLDatabaseException:

pymssql.pyx in pymssql.connect (pymssql.c:10824)()

OperationalError: (18456, b'Unknown error')

During handling of the above exception, another exception occurred:

AttributeError                            Traceback (most recent call last)
<ipython-input-21-22d7fd0e3d05> in <module>()
     11                                         password = tempPwd,
     12                                         port = '1433')
---> 13 except pymssql.MSSQLDatabaseException:
     14     print("ERROR")

AttributeError: 'module' object has no attribute 'MSSQLDatabaseException'
---------------------------------------------------------------------------
MSSQLSDatabaseException回溯(最近一次调用上次)
pymssql.connect中的pymssql.pyx(pymssql.c:10734)()
_mssql.pyx在_mssql.connect(_mssql.c:21821)()
_mssql.MSSQLConnection.中的mssql.pyx.初始化(_mssql.c:6581)()
_mssql.pyx在_mssql.maybe_raise_MSSQLDatabaseException(_mssql.c:17524)()
MSSQLSDatabaseException:(18456,b“未知错误”)
在处理上述异常期间,发生了另一个异常:
操作错误回溯(最近一次呼叫最后一次)
在()
11密码=tempPwd,
--->12端口='1433')
13除pymssql.MSSQLSDatabaseException外:
pymssql.connect中的pymssql.pyx(pymssql.c:10824)()
操作错误:(18456,b‘未知错误’)
在处理上述异常期间,发生了另一个异常:
AttributeError回溯(最近一次呼叫上次)
在()
11密码=tempPwd,
12端口='1433')
--->13除pymssql.MSSQLSDatabaseException外:
14打印(“错误”)
AttributeError:“模块”对象没有属性“MSSQLSDatabaseException”
我本以为输出将提供足够的信息,以解决如何捕获MSSQLSDatabaseException异常,但我尝试了各种变体,但都没有成功


如何使用输出计算捕获引发的异常的方式?

文档表明异常是
\u mssql
模块的一部分,因此您可能需要在此处捕获
\u mssql.MSSQLDatabaseException


经过一番探索,我找到了一个合理的解决方案。对于原始问题中列出的代码(使用pymssql.connect()),可能会出现两个异常。如果输入了正确的服务器地址,但用户名或密码不正确,则会引发MSSQLSDatabaseException。但是,如果服务器地址不正确,则会引发MSSQLSDriveRexception(但请参见末尾的注释)。要优雅地从这些错误中退出,似乎有必要捕获pymssql.InterfaceError(捕获MSSQLSDriverException)和pymssql.DatabaseError(捕获MSSQLSDatabaseError)

或者,您可以捕获使用_mysql生成的异常,正如match在注释中暗示的那样。(但是,在本例中,由于_mssql没有游标属性,因此随后将数据导入数据帧时会出现问题。)

希望这对其他人有用


(注意:如果在第一次运行这些功能时输入的SQL SERVER地址不正确,则会引发MSSQLSDriveRexception。如果输入的服务器地址正确(但用户和密码不正确)然后会引发MSQLDatabaseException。但是,如果随后输入了错误的服务器,则会继续引发MSQLDatabaseException,而不是像第一种情况那样引发MSQLDIVERException。)

谢谢您的回答。我已经尝试了我能找到的所有版本,包括_mssql,但我似乎仍然无法捕捉到这个异常。我已经尝试了更多,导入了_mysql,将代码从pymssql.connect()更改为_mssql.connect()捕获_mysql.MssqlDatabaseException和_mysql.MssqlDriverException似乎可以工作,但我仍然无法捕获pymssql.connect()生成的异常。
import pymssql
import getpass

tempServer = input("Enter host: ")
tempUser = input("Enter user: ")
tempPwd = getpass.getpass("Enter password: ")

try:
    phjTempConnection = pymssql.connect(server = tempServer,
                                        user = tempUser,
                                        password = tempPwd,
                                        port = '1433')
except pymssql.InterfaceError:
    print("A MSSQLDriverException has been caught.")

except pymssql.DatabaseError:
    print("A MSSQLDatabaseException has been caught.")
import pymssql
import _mssql
import getpass

tempServer = input("Enter host: ")
tempUser = input("Enter user: ")
tempPwd = getpass.getpass("Enter password: ")

try:
    phjTempConnection = _mssql.connect(server = tempServer,
                                       user = tempUser,
                                       password = tempPwd,
                                       port = '1433')

except _mssql.MssqlDriverException:
    print("A MSSQLDriverException has been caught.")

except _mssql.MssqlDatabaseException as e:
    print("A MSSQLDatabaseException has been caught.")
    print('Number = ',e.number)
    print('Severity = ',e.severity)
    print('State = ',e.state)
    print('Message = ',e.message)