Diceware Passphrase Generator
Is my handling of command line arguments correct or could it be done better?
  


It would be better to not reinvent the wheel and use argparse instead.


  
  Is the way I've broken my code down into individual functions reasonable or should certain functions be combined or broken apart?
  


It's quite fine the way you did it.
Every function seems to do just one thing, it's good like that.


  
  Are there any other glaring weaknesses?
  


Instead of this:


if len(sys.argv) == 1:
    return False
else:
    return True



Write like this:

return len(sys.argv) != 1




Instead of this:


with open(WORDS, 'r', 0) as in_file:



I'd recommend simply:

with open(WORDS) as in_file:




Instead of this:


for i in range(1, length + 1):
    key = generate_key()
    passphrase += word_dict[key] + ' '



This is simpler:

for _ in range(length):
    key = generate_key()
    passphrase += word_dict[key] + ' '


I replaced the loop variable i with _,
because it's a common convention when the loop variable is not used.



Lastly,
I recommend to switch to start using Python 3 instead of 2.7.