2017-06-03 202 views
0

我试图分裂名单,并将其复制到2名独立的名单和我得到: “类型错误:‘NoneType’对象未标化”Python列表“NoneType”错误

class example(object): 
     def ex(self,nums): 
      n = int(len(nums)/2) 
      nums1 = nums[:n] 
      nums2 = nums[n:] 
+4

'nums'不是一个列表......'nums'是'None' ... –

+1

nums变量在分割之前看起来像什么? – jmugz3

+0

数字将作为参数传递给函数。所以从技术上讲,在值传递之前它将是空的。我如何处理这种情况? – spunkyquagga

回答

1

你有没有验证nums确实是一个列表,并且n有一个值?如果您可以提供该代码,将来会很有用,因此用户可以提供更好的帮助。

此外,我不确定复制和粘贴代码时是否只是一个错误,但如果它在同一行上则不起作用。

顺便说一下,python使用None而不是null这就是为什么@Jeff Mercado在他的评论中提到了这一点。

我有示例代码的工作:检查

nums = [1, 2, 3, 4] 
n = 2 

nums1 = nums[:n] 
nums2 = nums[n:] 

print(nums1) 
print(nums2) 

Output: 
[1, 2] 
[3, 4] 

编辑如果列表为空

检查隐(PEP 8推荐的方式):

if not nums: 
    print("Nums is empty") 

检查明确(然而,这是蟒蛇皱眉):

if len(nums) == 0: 
    print("Nums is empty") 

有关内置非类型的更多信息,请参阅python 2.x的文档here和python 3.x的here文档。

再次编辑,现在你已经编辑完成您最初的问题..

class Example(object): 

    def ex(self, nums): 
     # Either use an if check or try/except 
     if not nums: 
      print("Nums is empty") 

     try: 
      n = int(len(nums)/2) 
      nums1 = nums[:n] 
      nums2 = nums[n:] 

      print(n) 
      print(nums1) 
      print(nums2) 
     except TypeError: 
      print("Exception: You would put your exception code here") 


example = Example() 

num_list1 = [1, 2, 3, 4] 
example.ex(num_list1) 

num_list2 = [] 
example.ex(num_list2) 

num_list3 = None 
example.ex(num_list3) 

输出:

2 
[1, 2] 
[3, 4] 
Nums is empty 
0 
[] 
[] 
Nums is empty 
Exception: You would put your exception code here 

补充建议:
1.要坚持正常的惯例,利用你的班级名称。这将有助于区分它与正常的函数调用和对象实例化。

+0

由于您上传了全新的代码段,因此再次进行了编辑。我希望我给你的信息有所帮助。我现在推荐玩这个游戏来帮助你学习。 –

+0

谢谢你的建议 – spunkyquagga

+0

乐于帮忙,欢迎来到Stack Overflow。如果此答案或任何其他人解决了您的问题,请将其标记为已接受。 –