Python 为什么变量存在的不确定状态是坏编程?

Python 为什么变量存在的不确定状态是坏编程?,python,Python,更重要的是,我如何避免它 更多参考请参见下面的链接;特别是paxdiablo的答复。 正如您可能猜到的,我有一个场景,其中我编程了一个网页,其中包含一个变量,该变量在运行时未知。 现在的情况是,用户上传的信息可以有几种不同的格式。更具体地说,是一个地址。例如,街道可能有一个方向(西南、北),地址可能有一个公寓限定符(单元#2F)。这些(或类似的事物/场景)将分配给不同的变量,并由不同的变量表示。由于数据是在我的代码中操作的,所以我有条件 if street_dir_var: #do s

更重要的是,我如何避免它

更多参考请参见下面的链接;特别是paxdiablo的答复。

正如您可能猜到的,我有一个场景,其中我编程了一个网页,其中包含一个变量,该变量在运行时未知。
现在的情况是,用户上传的信息可以有几种不同的格式。更具体地说,是一个地址。例如,街道可能有一个方向(西南、北),地址可能有一个公寓限定符(单元#2F)。这些(或类似的事物/场景)将分配给不同的变量,并由不同的变量表示。由于数据是在我的代码中操作的,所以我有条件

if street_dir_var:
    #do something
因此我的问题是:为什么这种形式不好,什么是合适的替代品


PS-如果有关系的话,我正在用Python编码

条件很好。问题是,如果甚至没有定义
street\u dir\u var
,该行将抛出
namererror
。从技术上讲,您可以捕获
namererror
,但这会导致代码混乱且无法维护。它还表明您是,这是一种糟糕的代码气味

通常,应该在试图访问变量的任何逻辑分支中定义变量。如果它因任何原因“不适用”,它至少应该是
None
。这是变量的一个良好默认值,通常也是需要的关键字参数的默认值

要在此处获得更具体的信息,请执行以下操作:

这些(或类似的事物/场景)将分配给和 由不同的变量表示

非常糟糕的代码气味。所有这些变量都代表一个单一地址的数据——您需要将所有这些变量聚合为一个变量,可以是一个类、
列表
、一个
dict
、或一个
命名的整数

class Address:
    def __init__(self, **kwargs):
       self.street = kwargs.get('street')
       self.directional = kwargs.get('directional')
       self.condo = kwargs.get('condo')

user_data = parse_data(some_data_source) # user_data looks like a dict

address = Address(**user_data)

一个地址,一个容器
address.condo
可能是
None
,但至少在我请求时定义了它。

条件可以。问题是,如果甚至没有定义
street\u dir\u var
,该行将抛出
namererror
。从技术上讲,您可以捕获
namererror
,但这会导致代码混乱且无法维护。它还表明您是,这是一种糟糕的代码气味

通常,应该在试图访问变量的任何逻辑分支中定义变量。如果它因任何原因“不适用”,它至少应该是
None
。这是变量的一个良好默认值,通常也是需要的关键字参数的默认值

要在此处获得更具体的信息,请执行以下操作:

这些(或类似的事物/场景)将分配给和 由不同的变量表示

非常糟糕的代码气味。所有这些变量都代表一个单一地址的数据——您需要将所有这些变量聚合为一个变量,可以是一个类、
列表
、一个
dict
、或一个
命名的整数

class Address:
    def __init__(self, **kwargs):
       self.street = kwargs.get('street')
       self.directional = kwargs.get('directional')
       self.condo = kwargs.get('condo')

user_data = parse_data(some_data_source) # user_data looks like a dict

address = Address(**user_data)

一个地址,一个容器
address.condo
可能是
None
,但至少在我请求时定义了它。

条件可以。问题是,如果甚至没有定义
street\u dir\u var
,该行将抛出
namererror
。从技术上讲,您可以捕获
namererror
,但这会导致代码混乱且无法维护。它还表明您是,这是一种糟糕的代码气味

通常,应该在试图访问变量的任何逻辑分支中定义变量。如果它因任何原因“不适用”,它至少应该是
None
。这是变量的一个良好默认值,通常也是需要的关键字参数的默认值

要在此处获得更具体的信息,请执行以下操作:

这些(或类似的事物/场景)将分配给和 由不同的变量表示

非常糟糕的代码气味。所有这些变量都代表一个单一地址的数据——您需要将所有这些变量聚合为一个变量,可以是一个类、
列表
、一个
dict
、或一个
命名的整数

class Address:
    def __init__(self, **kwargs):
       self.street = kwargs.get('street')
       self.directional = kwargs.get('directional')
       self.condo = kwargs.get('condo')

user_data = parse_data(some_data_source) # user_data looks like a dict

address = Address(**user_data)

一个地址,一个容器
address.condo
可能是
None
,但至少在我请求时定义了它。

条件可以。问题是,如果甚至没有定义
street\u dir\u var
,该行将抛出
namererror
。从技术上讲,您可以捕获
namererror
,但这会导致代码混乱且无法维护。它还表明您是,这是一种糟糕的代码气味

通常,应该在试图访问变量的任何逻辑分支中定义变量。如果它因任何原因“不适用”,它至少应该是
None
。这是变量的一个良好默认值,通常也是需要的关键字参数的默认值

要在此处获得更具体的信息,请执行以下操作:

这些(或类似的事物/场景)将分配给和 由不同的变量表示

非常糟糕的代码气味。所有这些变量都代表一个单一地址的数据——您需要将所有这些变量聚合为一个变量,可以是一个类、
列表
、一个
dict
、或一个
命名的整数

class Address:
    def __init__(self, **kwargs):
       self.street = kwargs.get('street')
       self.directional = kwargs.get('directional')
       self.condo = kwargs.get('condo')

user_data = parse_data(some_data_source) # user_data looks like a dict

address = Address(**user_data)

一个地址,一个容器<代码>地址。公寓可能是
,但至少在我要求时定义了它。

感谢您的回复。我是一个初级程序员,所以用一个范例进行编码是很困难的。通常,我只想让代码正常工作。你能简单解释一下为什么一个地址的不同部分由不同的变量表示时会有“非常糟糕的代码气味”吗??具体来说,它会导致什么问题?关键是您需要将所有这些变量收集到一个对象中。这样做可以使您的代码更易于阅读,并且更易于维护/重构。如果不写一封信,很难解释更多