First, when you loop:
For Each curr In
Workbooks("ExtractedColumns").Sheets("practice").Range("G:G")
the syntax suppose to be in 1 line:
For Each curr In Workbooks("ExtractedColumns").Sheets("practice").Range("G:G")
(unless you had - between the 2 lines of code, or you didn't share your code as you have it).
However, you already assigned Workbooks("ExtractedColumns").Sheets("practice") to ws in the previous line, so why not use For Each curr In ws.Range("G:G")?
Furthermore, looping through your entire column G will take forever, loop through only occupied cells in Column G, with:
For Each curr In ws.Range("G1:G" & ws.Cells(ws.Rows.Count, "G").End(xlUp).Row)
2nd reason, once you find the line where curr.Value = " - ", and you want to delete that entire row, you need to use curr.EntireRow.Delete.
And last, like mentioned by @Comintern, you need to trap cells with errors, you don't need to assign another variable to the curr.Value, just use If IsError(curr.Value) Then.
Code
Sub deleteRows()
Dim curr As Range
Dim ws As Worksheet
Set ws = Workbooks("ExtractedColumns").Sheets("practice")
' loop through only occupied cells in Column G
For Each curr In ws.Range("G1:G" & ws.Cells(ws.Rows.Count, "G").End(xlUp).Row)
On Error Resume Next
If IsError(curr.Value) Then ' check if cell.value return an error
If Err.Number <> 0 Then
Err.Clear
On Error GoTo 0
End If
Else ' current cell.value doesn't return an error
If curr.Value = " - " Then
curr.EntireRow.Delete '<-- delete entire row
End If
End If
Next curr
End Sub
currwhen it gives you the type mismatch error?IsError.