2024-09-27 09:23:55 发布
网友
我不明白为什么python(至少2.7)没有验证错误的异常处理机制。在
示例:
try: some code selecting data from pymongo except pymongo.errors.OperationFailure: exception
在这种情况下,如果第一次没有调用异常,python将不会验证我是否真的导入了pymongo库。在
知道为什么吗?在
根据PyMongo文档,异常pymongo.errors.OperationFailure将“在数据库操作失败时引发”。因此,except块只有在引发这样的错误时才会被计算。在
pymongo.errors.OperationFailure
except
我假设通过“pymongo的存在的验证”,你指的是类似于:
try: import pymongo except: print("PyMongo not found!") sys.exit(-1)
此方法通常用于提供回退(和向后兼容),而不是“验证”导入。例如,在json编码器/解码器的情况下,我们可以尝试是否有可用的simplejson库,并使用{}库作为备用,如下所示:
json
simplejson
假设在脚本的开头,您已经有了import pymongo,我看不出为什么您应该检查或“验证”pymongo是否已导入:import pymongo如果找不到pymongo库,import pymongo将已经引发一个{}。在
import pymongo
pymongo
如果我没看错你的问题,你想知道如果你还没有导入pymongo模块,except pymongo.errors.OperationFailure在加载模块时不会导致错误。在
except pymongo.errors.OperationFailure
与Python中的大多数东西一样,except子句的参数是在运行时计算的。事实上,它们可以是表情!Python不会在“编译”时验证它们,就像它在那个时候验证任何其他名称一样。在
原因是Python是一种动态语言。导入可以有条件地完成,也可以基于“编译”时未知的名称执行,并且可以用代码替换、修改或删除模块和其他命名空间。因此,如果不运行代码,Python实际上无法知道在代码执行过程中,pymongo.errors.OperationFailure是否是一个有效的名称。在
首先,pymongo.errors.OperationFailure可以定义在任何地方,不仅是pymongo模块的一部分,而且是同一文件中定义的pymongo对象的属性。在
因此,在处理异常时,Python不应该检查是否导入了特定的模块。在
但如果你这样做:
您将看到,如果找不到模块,实际上会引发导入错误:
如果我的回答对您来说还不够,并且您想知道为什么第一次运行脚本时包含pymongo.errors.OperationFailure不会抛出任何错误,即使您的代码中没有任何import pymongo语句,那么请参见kindall's answer on Python being a dynamic language。在
根据PyMongo文档,异常
pymongo.errors.OperationFailure
将“在数据库操作失败时引发”。因此,except
块只有在引发这样的错误时才会被计算。在我假设通过“pymongo的存在的验证”,你指的是类似于:
此方法通常用于提供回退(和向后兼容),而不是“验证”导入。例如,在}库作为备用,如下所示:
^{pr2}$json
编码器/解码器的情况下,我们可以尝试是否有可用的simplejson
库,并使用{假设在脚本的开头,您已经有了}。在
import pymongo
,我看不出为什么您应该检查或“验证”pymongo是否已导入:import pymongo
如果找不到pymongo
库,import pymongo
将已经引发一个{如果我没看错你的问题,你想知道如果你还没有导入
pymongo
模块,except pymongo.errors.OperationFailure
在加载模块时不会导致错误。在与Python中的大多数东西一样,
except
子句的参数是在运行时计算的。事实上,它们可以是表情!Python不会在“编译”时验证它们,就像它在那个时候验证任何其他名称一样。在原因是Python是一种动态语言。导入可以有条件地完成,也可以基于“编译”时未知的名称执行,并且可以用代码替换、修改或删除模块和其他命名空间。因此,如果不运行代码,Python实际上无法知道在代码执行过程中,
pymongo.errors.OperationFailure
是否是一个有效的名称。在首先,
pymongo.errors.OperationFailure
可以定义在任何地方,不仅是pymongo
模块的一部分,而且是同一文件中定义的pymongo
对象的属性。在因此,在处理异常时,Python不应该检查是否导入了特定的模块。在
但如果你这样做:
您将看到,如果找不到模块,实际上会引发导入错误:
^{pr2}$如果我的回答对您来说还不够,并且您想知道为什么第一次运行脚本时包含
pymongo.errors.OperationFailure
不会抛出任何错误,即使您的代码中没有任何import pymongo
语句,那么请参见kindall's answer on Python being a dynamic language。在相关问题 更多 >
编程相关推荐