2017-06-03 46 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。如果此答案或任何其他人解決了您的問題,請將其標記爲已接受。 –