if内定义的变量,当if为false时,变量无法引用?

for bt_con in bentie_content:  # 过滤回复中的标签
    bt_con = re.sub('<.*?>', '', bt_con)
    bt_con = re.sub('\s', '', bt_con)
    if bt_con != '':
        print(bt_con)
        bt_cons = [bt_con]
if not huifu_id:
    huifu_id = ['']
date_list = bentie_id + bentie_uid + bentie_tx + bentie_nickname + bentie_creattime + bt_cons + huifu_id

代码如上,我在给date_list赋值的时候,引用了bt_cons变量,但是当if条件的结果为false时,是不是就没有bt_cons这个变量了?

尝试了加else,continue、break都不行...后来想着把这个赋值挪到if里面,但是...下面还有一个if要判断,而且判断的结果也是要赋值的...

请问这种情况如何处理,目的是当bt_con不为空时,转成列表,为空时这条就跳过

阅读 3.9k
2 个回答

常规的解决方法是在if之前给变量一个初值,比如:

bt_cons = []
if bt_con != '':
  bt_cons = [bt_con]
  

当然也可以用python的二元表达式简化语句:

bt_cons = [bt_con] if bt_con != '' else []

  

本身bt_cons在其他处没有定义(初始化),而仅当if起效时才初始化,当然如果if不起效就不能引用到,这个你需要在流程上进行处理,保证其有初始化到,后面就不出错
方法就是i38me介绍的两种方法,注意的是你判断的是bt_con 而不是 bt_cons,这时两个不同的东西。

当然就是你的代码也可以按下面的处理来保证不报错:

for bt_con in bentie_content:  # 过滤回复中的标签
    bt_con = re.sub('<.*?>', '', bt_con)
    bt_con = re.sub('\s', '', bt_con)
    if bt_con != '':
        print(bt_con)
        bt_cons = [bt_con]
    else :
        bt_cons = []
if not huifu_id:
    huifu_id = ['']

date_list = bentie_id + bentie_uid + bentie_tx + bentie_nickname + bentie_creattime + bt_cons + huifu_id
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题