我正在尝试将一些代码从2转换为3和下面的简单脚本
import types
from types import NoneType结果在
ImportError:无法导入名称NoneType
如何将上面的内容从2转换为3?
发布于 2013-04-05 22:36:47
在NoneType模块中不再存在types引用。您应该直接使用None (即obj is None )检查身份。如果您真的需要NoneType,另一种方法是让它使用:
NoneType = type(None)这实际上与types.NoneType在2007年11月28日上删除之前定义的方式完全相同。
顺便提一句,您不需要导入模块才能使用from .. import语法,因此如果不在其他地方使用模块引用,则可以删除import types行。
发布于 2022-01-05 15:03:47
在执行验证时,获取NoneType是很有用的,这是在可接受类型的元组中简化传递允许的None类型的条件链。所以,不要写这样的东西:
a = {
# A dict with some fields...
}
# In this example, the optional field is valid if it is a string
is_valid = (
a.get(optional_field) is None
or isinstance(a[optional_field], str)
)人们可以写:
is_valid = isinstance(a.get(optional_field), (str, NoneType))可以通过将默认字符串值传递给.get(...)来解决此问题(因为在没有字段的情况下,您将返回一些有意通过验证的内容,即使该值不存在),但它太烦琐、晦涩,并真正影响可读性。
由于NoneType不再是您可以导入的东西,因此您可以在需要时自己制作。以下是一些选择:
NoneType = type(None)
NoneType = None.__class__如果您遵循NoneType建议,linter可能会抱怨一个名为PEP8的变量不符合您的命名约定。我发现在需要type(None)的地方简单地使用NoneType就更容易了。它只是两个字符之间的差异,就像可读的一样,并且保存了一行代码;)
以上片段的最终解决方案如下所示:
is_valid = isinstance(a.get(optional_field), (str, type(None)))发布于 2021-10-31 10:02:40
如果用例允许,则可以:
if my_dict.get('key'): # By Default: returns None if key doesn't exists
# Do something
else:
# Do something with None没有一个是虚假的值,所以您可以在不导入任何内容的情况下使用if- get语句。
https://stackoverflow.com/questions/15844714
复制相似问题