2017-09-09 12 views
0

私は組み込み関数lenの定義を変更してから、ctypes module.Butをインポートしようとしましたが、そして、ここで私はctypesをインポートするときになぜ間違っているのか分かりません

import builtins 

def func(obj): 
    print("Length: %d" % len(obj)) 
builtins.len = lambda obj: "Bad!!!" 

import ctypes 

エラーのtracbackです:.Hereは私のコードです

Traceback (most recent call last): 


    File "<stdin>", line 1, in <module> 
    File "<frozen importlib._bootstrap>", line 969, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 673, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 661, in exec_module 
    File "<frozen importlib._bootstrap_external>", line 772, in get_code 
    File "<frozen importlib._bootstrap_external>", line 491, in _code_to_bytecode 
    File "<frozen importlib._bootstrap_external>", line 42, in _w_long 
ValueError: invalid literal for int() with base 10: 'Bad!!!' 
Error in sys.excepthook: 
Traceback (most recent call last): 
    File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 53, in apport_excepthook 
    if not enabled(): 
    File "/usr/lib/python3/dist-packages/apport_python_hook.py", line 24, in enabled 
    import re 
    File "<frozen importlib._bootstrap>", line 969, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 673, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 661, in exec_module 
    File "<frozen importlib._bootstrap_external>", line 772, in get_code 
    File "<frozen importlib._bootstrap_external>", line 491, in _code_to_bytecode 
    File "<frozen importlib._bootstrap_external>", line 42, in _w_long 
ValueError: invalid literal for int() with base 10: 'Bad!!!' 

Original exception was: 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<frozen importlib._bootstrap>", line 969, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 673, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 661, in exec_module 
    File "<frozen importlib._bootstrap_external>", line 772, in get_code 
    File "<frozen importlibbootstrap_external>", line 491, in _code_to_bytecode 
    File "<frozen importlib._bootstrap_external>", line 42, in _w_long 
ValueError: invalid literal for int() with base 10: 'Bad!!!' 

これは私がたくさんのパズル。誰かが私を助けることができれば非常に感謝します!

+1

なぜあなたは困惑していますか?依存性の高い基本的な組み込み関数の機能を変更し、それを意図した通りに(間接的に、インポートを通じて)使用しようとすると、エラーが発生するはずです。 – jedwards

+0

ctypesをインポートしようとしたときに変更されたlen関数が実行されたことを意味しますか? @jedwards –

+0

ctypesをインポートしようとすると、変更されたlen funが確実に呼び出されます( 'ValueError:基数10のint()の無効なリテラルを参照: 'Bad !!!')。私はなぜctypesのバージョンが将来のパッケージに依存しているのでないかは分からない。 – jedwards

答えて

1

len関数が非整数文字列を返すためです。

あなたはただあなたが持っている可能性がまったく同じ動作で実行されていました:

>>> int("I should know playing with builtins is always a bad thing") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: 'lol' 

のようにコードを更新するようにしてください:それを表示するには

builtins.len = lambda obj: "123" 

+0

それは動作します!ありがとうございました! –

関連する問題