TypeError: unhashable type: 'list'

Dave Angel davea at davea.name
Mon Dec 22 18:44:46 EST 2014


On 12/22/2014 06:10 PM, ronald.kevin.burton at gmail.com wrote:
> I am getting an exception that the traceback looks like:
>
> ------------------------------------------------------------
> Traceback (most recent call last):
>    File "C:\Projects\QA\robot_20141103\resources\assessment_utilities.py", line 29, in create_new_project
>      program = customer.add(program_code)
>    File "C:\Projects\QA\robot_20141103\resources\assessment_customer.py", line 589, in add
>      program = ProgramMaker.Code2Program(program_code, self)
>    File "C:\Projects\QA\robot_20141103\resources\programmaker.py", line 25, in Code2Program
>      'ASSESS_PPL' : PPL(customer)
>    File "C:\Projects\QA\robot_20141103\resources\ppl.py", line 20, in __init__
>      MeasureMaker.Code2Measure('Furnace Whistle', self)
> TypeError: unhashable type: 'list'
> ------------------------------------------------------------	
>
> My problem is that I am not sure what the problem is. I can check the type of 'self' which is an object and the string 'Furnace Whistle' is obviously not a list. The static function 'MeasureMaker.Code2Measure' is a simple factory:
>
> class MeasureMaker:
>
>      def Code2Measure(measure_code, core):
>          try:
>              return {
> ...
>                  'Furnace Whistle': FurnaceWhistle(core)
>              }[measure_code]
>          except KeyError as error:
>              return None
>      Code2Measure = staticmethod(Code2Measure)
>
> What is the 'list' that is in the exception? Or how do I find out?
>


I don't see enough pieces to tell the problem at all.  The two lowest 
levels of stack trace are on line 20 and 25, and you don't include 
either of those in your fragments.  Further, since many of your 
statements are multi-statement lines, the problem isn't necessarily 
showing in the stack trace, which only shows one line of the offending 
statement.

Finally, I suspect PPL is some form of alias, which you don't show 
either.  And the stack trace shows four different source files. 
Probably only the last two matter, but it'd be very useful to see the 
class/function definitions involved in their entirety, plus any "from 
xxx import yyy" type aliases that may be relevant.

Are you perhaps using Python 2.x ?  If so, you want to inherit from 
object.  I doubt that's your problem, but it's a missing clue.  Always 
state your Python version when describing a new problem.

BTW, using @staticmethod decorator is usually clearer than the way you 
have it here.  But that's no bug either.

-- 
DaveA




More information about the Python-list mailing list